Как я могу удалить строку перед «#»?

#iphone #objective-c #cocoa-touch #string #nsstring

#iPhone #objective-c #cocoa-touch #строка #nsstring

Вопрос:

Есть строка.

NSString * test = @»1997#test»

Я хочу удалить строку перед «#».
И это меняется следующим образом :

NSString * test = @»test»

Вы можете мне помочь?

Комментарии:

1. Будет ли в строке когда-либо только один символ хэша / фунта (#)?

Ответ №1:

Используя стандартные методы NSString API:

 NSString* test = @"1997#test";
NSArray* parts = [test componentsSeparatedByString:@"#"];
NSString* result = [parts count] > 1 ? [parts objectAtIndex: 1] : [parts objectAtIndex: 0];
  

Или, если это слишком тупо (что лично я считаю таковым), вы можете использовать категорию NSString JavaAPI, а затем выполнить:

 NSString* test = @"1997#test";
NSString* result = [test substringFromIndex: [test indexOf:@"#"]   1];
  

Ответ №2:

Технически удаление строки перед # оставило бы вас с «#test».

В любом случае, используйте - [NSString componentsSeparatedByString:] :

 test = [[test componentsSeparatedByString:@"#"] lastObject];
  

Обратите внимание, что этот подход хрупок: если у вас есть 2 # , вы получите только последнюю часть, например «foo» из «abc #bar #foo».

Использование lastObject вместо objectAtIndex: означает, что если в строке нет # , то вы получаете исходную строку вместо сбоя.

Ответ №3:

Не говорю, что это лучше, чем другие способы, но мне было любопытно посмотреть, смогу ли я сделать это без componentsSeparatedByString и objectAtIndex.

 NSString* oldString = @"1976#test";
int stringLocation = [oldString rangeOfString:@"#" ].location  1 ;
NSString* newString =[oldString substringWithRange: NSMakeRange (stringLocation,[oldString length] -  stringLocation )];
  

Ответ №4:

 NSArray *components=[test componentsSeparatedByString:@"#"];
NSString *test=[components objectAtIndex:1];
  

это поможет вам

Комментарии:

1. В вашем фрагменте кода небольшая опечатка. («NSSting» вместо NSString во второй строке.) 🙂

Ответ №5:

Если в строке будет только один символ хэша, вы могли бы просто использовать метод NSString componentsSeparatedByString для возврата массива, а затем просто вставить первый элемент массива в строку.

Например:

 NSString *test = @"1997#test";
NSArray *stringComponents = [test componentsSeparatedByString:@"#"];
NSString *test = [stringComponents objectAtIndex:1];
  

Ответ №6:

NSString * test = @»Четан#iPhone#тест»;

NSArray *stringComponents = [тестовые компоненты, разделенные строкой:@»#»];

for (int i = 0; i < [Количество строковых компонентов]; i )

{

  NSString *test = [stringComponents objectAtIndex:i];

 if ([test isEqualToString:@"test"] == true)

 {

      NSLog(@"found");

      break;

 }
  

}