Java String.split
использует регулярное выражение для соответствия разделителю, возможно, нулевой длины, при котором строка должна быть разделена.Затем он извлекает части строки до и после сопоставления, он не извлекает ничего, что соответствует RE.
В Objective-C есть методы для разделения строки, componentsSeparatedBy...
, но ни один из них не требуетрегулярное выражение.Ваша первая попытка попытаться использовать один из них, определив набор символов с помощью вашего регулярного выражения - однако вы не можете определить набор символов таким образом, и даже если вы могли бы, набор символов в вашем конкретном разделителе пуст.
Ваша третья попытка не завершена, поэтому мы пропустим это.
Теперь ваша вторая попытка находит разделитель, используя firstMatchInString:
, но обнаружив, что он не пытается извлечь строки до и после этого разделителя, т.е.не выполнить фактическое разделение.Если вы сделаете это, у вас есть создание Objective-C, эквивалентное Java-расщеплению.
В общих чертах:
- Используйте
firstMatchInString:
, чтобы найти первый разделитель в вашей строке - Если совпадение не удалось, вы закончили, добавьте оставшуюся строку в вашу коллекцию компонентов и верните.
- Если совпадение выполнено успешно, то:
- извлеките подстроку до началасоответствия разделителя - часть результата
firstMatchInString:
представляет собой NSRange
, который содержит начальный индекс, а NSString
имеет методы для извлечения подстрок на основе индексов. - извлекает подстроку после разделителяmatch - аналогично вышеописанному, но не забудьте учесть длину соответствия при расчете индекса, где начинается эта подстрока
- , теперь вам нужно разделить эту вторую подстроку, поэтому вернитесь к шагу 1 и повторите процесс, используяэту подстроку.
Вы можете кодировать вышеприведенное как простой цикл while
в Objective-C.
Если при попытке реализоватьЕсли вы застряли в этом алгоритме, задайте новый вопрос, покажите код, объясните свою проблему, добавьте ссылку на этот вопрос, и кто-то, несомненно, поможет вам.
HTH