Как в Objective-C для iOS как удалить последний символ строки с помощью действия кнопки?
Objective-C - удалить последний символ из строки
Ответ 1
В вашем классе контроллера создайте метод действия, в который вы закроете кнопку до интерфейса. Внутри этого метода вы можете обрезать строку следующим образом:
if ([string length] > 0) {
string = [string substringToIndex:[string length] - 1];
} else {
//no characters to delete... attempting to do so will result in a crash
}
Если вам нужен причудливый способ сделать это только в одной строке кода, вы можете записать его как:
string = [string substringToIndex:string.length-(string.length>0)];
* Объяснение фантастического однострочного фрагмента кода:
Если есть символ для удаления (т.е. Длина строки больше 0)
(string.length>0)
возвращает 1
, тем самым возвращая код:
string = [string substringToIndex:string.length-1];
Если нет символа для удаления (т.е. Длина строки НЕ больше 0)
(string.length>0)
возвращает 0
, тем самым возвращая код:
string = [string substringToIndex:string.length-0];
Что предотвращает сбои.
Ответ 2
Если это NSMutableString (который я бы рекомендовал, так как вы меняете его динамически), вы можете использовать:
[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];
Ответ 3
Решения, приведенные здесь, фактически не учитывают многобайтовые символы Unicode ( "скомпонованные символы" ) и могут приводить к недопустимым строкам Unicode.
Фактически заголовочный файл iOS, содержащий объявление substringToIndex
, содержит следующий комментарий:
Подсказка: используйте с rangeOfComposedCharacterSequencesForRange: чтобы не разбивать скомпонованные символы
Смотрите как использовать rangeOfComposedCharacterSequenceAtIndex:
, чтобы правильно удалить последний символ.
Ответ 4
Документация - ваш друг, NSString
поддерживает вызов substringWithRange
, который может сократить строку, в которой вы возвращаете сокращенную строку. Вы не можете изменить экземпляр NSString
, он является неизменным. Если у вас NSMutableString
есть метод под названием deleteCharactersInRange
, который может изменить строку на месте
...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...