Ваш формат строки очень хорошо определяется (как вы говорите, имя вы после всегда, которому предшествуют «/ name_» и всегда, за которым следует «_»), и я полагаю, что имя («john»), следовательно, не может содержать символ подчеркивания.
поэтому я бы рассмотреть простое регулярное выражение, которое идеально подходит для такого рода проблемы:
NSString *regexPattern = @"^.*/name_(.*?)_.*$";
NSString *name = [dataString stringByReplacingOccurrencesOfString: regexPattern
withString: @"$1"
options: NSRegularExpressionSearch
range: NSMakeRange(0, dataString.length)];
В случае, если вы не знакомы с регулярными выражениями, что здесь происходит:
- начало в начале строки (далее "^")
- Разрешить ничего ("*"), а затем "/ name_"
- Capture то, что следующим образом (вводное слово s означает «захватить это»)
- В скобках разрешите что угодно («. *»), но сделайте его как можно короче («?» после «*»)
- За ним следует подчеркивание, а затем разрешить все, что может быть до конца строки («$»)
Это будет соответствовать всей строке и при подстановке соответствия (т. е. всей строки) с «$ 1», он заменит совпадение подстрокой, включенной в первую (и только) круглую скобку.
Результат: он выдает строку, содержащую только имя. Если строка не имеет правильного формата (т. Е. Нет имени между двумя символами подчеркивания), то это ничего не изменит и вернет полную, оригинальную строку.
Это вопрос стиля кодирования, предпочитаете ли вы один подход друг другу, но если вам нравятся регулярные выражения, то этот подход является чистым, понятным и простым в обслуживании.
Как я вижу, любая хрупкость в этом обусловлена форматом данных, который выглядит подозрительно, как что-то, что зависит от других «случайных» фрагментов данных, поэтому, какой бы метод вы ни выбрали для разбора этой строки, убедитесь, что вы добавили некоторые защитные тесты, чтобы проверить формат данных и предупредить вас, если неожиданные строки начнут вводить ваши данные. Это может быть через несколько лет, когда вы забыли все о символах подчеркивания, регулярных выражений и NSScanner
.
Итак, вы использовали NSScanner. где код этого подхода? – vikingosegundo
Итак, два слова, разделенные символом подчеркивания после имени, - это то, что вы хотите извлечь? – Anupdas
Итак, вы просто хотите бросить все на помощь, не сказав, где у вас есть трудности? Существует так много тем о разделении строки на более мелкие. Вы запустили поиск? –