2009-11-14 2 views
0

Я имеющий NSString так:componentsSeparatedByString для SFV файлов

музыку, которая rocks.mp3 e99a65fb

Проблема в том, что между именем (musicthatrocks.mp3) и CRC32 контрольная сумма (e99a65fb), тогда может быть много больше пробелов, чем одно. Как я могу разделить строку на массив? Я думал об использовании компонентовSeparatedByString, но моя проблема в том, что имя файла также может содержать пробелы.

Заранее благодарен.

ответ

2

Если вы в порядке с регулярными выражениями, вы можете сделать это именно так. Например (с использованием RegexKitLite):

NSString * fileName = [line stringByMatching:@"(.*)\\s" capture:1]; 

объяснение регулярных выражений: (.*) Это будет соответствовать столько символов, сколько он может, до тех пор, пока не найдет пробел. Однако захват является жадным, что означает, что он будет захватывать как можно больше символов до последнего символа пробела (в двух словах).

Или вы можете использовать методы NSString для поиска последнего вхождения символа пробела и получения подстроки от начала строки до последнего символа пробела.

Или вы можете разделить строковое основание на @" ", выбросить последний объект в массив и затем перекомпилировать массив с помощью @" ".

+0

zomfg omg спасибо вам, что он работает! Потрясающие!! – 2009-11-14 20:45:07

+0

ой, я использовал RegexKitLite :-) – 2009-11-14 20:45:40

1
  1. Использование componentsSeparatedByString:.
  2. Получите lastObject, который является CRC32.
  3. Используйте subarrayWithRange: для создания нового массива без CRC32.
  4. Используйте componentsJoinedByString: для восстановления имени файла.

Возможно, вы захотите сделать шаг 4 в цикле, повторно удалив последний объект, пока не будет указано имя файла в целевом каталоге или в конце массива не будет пустых строк. Это обрабатывает случай множественных пробелов между именем файла и CRC32, а также случай, когда имя файла заканчивается в пробелах (патологически, но возможно).

Смежные вопросы