componentsSeparatedByString для файлов SFV - PullRequest
0 голосов
/ 14 ноября 2009

У меня есть NSString как это:

музыка, которая качается.mp3 e99a65fb

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

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2009

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...