#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
.