Разделить строку Objective-C

#objective-c

#objective-c

Вопрос:

У меня есть строка, подобная этой

 NSString *string = @"feng2zhong3"
  

и я хочу разделить эту строку на feng2 и zhong3 , как это сделать?

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

1. Есть ли у вас определенный критерий для разделения строк или вы заинтересованы в разделении только этой строки?

2. если вы ищете эту строку, это обычный ваш поиск

3. Не только одну, в ней много разных строк, подобных этой, поэтому мне нужно общее решение.

4. можете ли вы опубликовать еще несколько строк …. я найду общую..

5. xiao3xin1 feng1kuang2 you3bang1zhu4 bu4tong2, chuang4yi4. Похоже, что эти строки, спасибо!

Ответ №1:

Попробуйте:

 NSString* feng = [string substringToIndex:4]
NSString* zhong = [string substringFromIndex:5]
  

Редактировать:

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

 NSString* string = @"feng4shui5";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"D d " options:NSRegularExpressionCaseInsensitive error:amp;error];
NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
for (NSTextCheckingResult *match in matches) {
     NSRange matchRange = [match range];
     NSRange firstHalfRange = [match rangeAtIndex:1];
     NSRange secondHalfRange = [match rangeAtIndex:2];
     NSLog([userinput substringWithRange:matchRange]);
}
  

где string — это строка, содержащая ваши входные данные.

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

1. Я думаю, это должно быть [a-z], а не [a-b]

2. Что касается интернационализации, я думаю, что-то вроде D было бы лучше, чем [a-z] ?

3. хорошая идея, обновлено. Однако я просто предполагал, что приведенные примеры охватывают все тестовые случаи.

Ответ №2:

Вы могли бы использовать [NSString rangeOfCharacterFromSet:options:range:] с [NSCharacterSet decimalDigitCharacterSet] и получать подстроки через результирующие диапазоны.

Или вы могли бы использовать NSScanner , используя:

 NSCharacterSet *digitSet = [NSCharacterSet decimalDigitCharacterSet];
NSScanner *scanner = [NSScanner scannerWithString:inputString];
  

… и последовательные вызовы:

 success = [scanner scanUpToCharactersFromSet:digitSet intoString:amp;namePart];
// ...
success = [scanner scanCharactersFromSet:digitSet intoString:amp;digitPart];
// ...
  

Ответ №3:

используйте методы substringFromIndex и substringToIndex

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

     NSMutableString *s = @"fig2sine3";
    NSCharacterSet *removeCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    array=[s componentsSeparatedByCharactersInSet:removeCharSet];
  

nslog(@»разделенные строки %@»,массив);

Это абсолютно полезно для ваших требований.

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

1. При этом также удаляются конечные цифры, т. е. «fig2sine3» становится «fig», «sine» вместо «fig2», «sine3». Также просто используйте decimalDigitCharacterSet .