2013-02-19 4 views
0

Я пытаюсь увидеть, если есть короткий способ сделать следующее:удаление всего содержимого строки до определенной строки в качестве NSString

давайте скажем у меня есть следующие NSString:
@"123456 copy cat";

Мне нужно удалить все до «копирования» и длины текста, прежде чем он будет переменным (зависит от пользовательского ввода)

Я знаю, что, возможно, я могу сделать бесконечный цикл для проверки подстроки, но я надеюсь, что есть более быстрый способ

+3

Вы ничего не можете удалить из NSString. –

ответ

12
NSString *string = @"123456 copy cat"; 
NSRange range = [string rangeOfString:@"copy"]; 
NSString *newString = [string substringFromIndex:range.location]; 

Это простой ответ. Проблема в том, что ваш пользователь может ввести слово «копия», а затем что? Даже если вы получите такой диапазон:

NSRange range = [string rangeOfString:@"copy cat"]; 

еще есть шанс, что ваш пользователь может ввести эту фразу. К тому времени, когда вы добавите дополнительные проверки, это уже не «короткий путь».

EDIT

Не пропускайте превосходное наблюдение Чака в комментариях для использования:

-[NSString rangeOfString:options:]

+0

это правильно, но это будет работать только с копией первого экземпляра, чтобы сделать его жадным, вам нужно будет сделать это в цикле и посмотреть, будет ли он короче. –

+0

или используйте regexp –

+3

@GradyPlayer: Чтобы использовать последнее вхождение «copy» вместо первого, просто используйте '[string rangeOfString: @" copy "options: NSBackwardsSearch]'. Нет необходимости в цикле. – Chuck

2

Чтобы удалить часть строки вы должны либо создать новую строку, содержащую часть, которую вы хотите сохранить, или создать изменяемую копию вашей строки и изменить ее.

Чтобы создать новую строку, содержащую часть, начиная с «копией»:

NSString *input; 
NSString *output; 
NSRange copyRange; 

input = @"123456 copy cat"; 
copyRange = [input rangeOfString:@"copy"]; 
output = [input substringFromIndex:copyRange.location]; 

Чтобы создать изменяемую строку и удалить часть до «копию»:

NSString *input; 
NSMutableString *output; 
NSRange copyRange; 

input = @"123456 copy cat"; 
output = [input mutableCopy]; 
copyRange = [output rangeOfString:@"copy"]; 
[output replaceCharactersInRange:NSMakeRange(0, copyRange.location) withString:@""]; 
[output autorelease]; // depending on what you want to do 

Также см комментарии в другом ответе об использовании rangeOfString: withOptions: с NSBackwardsSearch в случае, если пользовательский ввод также содержит слово «вход».

Смежные вопросы