Objective-C - удалить последний символ из строки

Как в Objective-C для iOS как удалить последний символ строки с помощью действия кнопки?

Ответ 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];
...