it-swarm.com.ru

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

В Objective C для iPhone, как мне удалить последний символ строки, используя действие кнопки.

150
Omar

В вашем классе контроллера создайте метод действия, к которому вы подключите кнопку в Интерфейсном Разработчике. Внутри этого метода вы можете обрезать вашу строку следующим образом:


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];
Что предотвращает сбои.

416
Marc Charbonneau

Если это NSMutableString (который я бы порекомендовал, поскольку вы меняете его динамически), вы можете использовать:

[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];
51
Dave DeLong

Приведенные здесь решения на самом деле не учитывают многобайтовые символы Юникода ("составные символы") и могут привести к недопустимым строкам Юникода.

Фактически, заголовочный файл iOS, который содержит объявление substringToIndex, содержит следующий комментарий:

Подсказка: используйте с rangeOfComposedCharacterSeptionsForRange: чтобы не разбивать составные символы

Смотрите как использовать rangeOfComposedCharacterSequenceAtIndex: чтобы правильно удалить последний символ.

8
user1071136

Документация - ваш друг, NSString поддерживает вызов substringWithRange, который может сократить строку, если у вас есть возвращенная сокращенная строка. Вы не можете изменить экземпляр NSString, который является неизменным. Если у вас есть NSMutableString, есть метод с именем deleteCharactersInRange, который может изменить строку на месте

...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...
5
Harald Scheirich