componentsSeparatedByString用于SFV文件

时间:2009-11-14 19:26:58

标签: objective-c cocoa

我有一个像这样的NSString:

  

rocks.mp3的音乐e99a65fb

问题是文件名(musicthatrocks.mp3)和CRC32校验和(e99a65fb)之间可能有更多的空格,然后是一个。如何将线分成数组? 我想过使用componentsSeparatedByString,但我的问题是文件名也可以包含空格。

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果您对正则表达式没问题,可以这样做。例如(使用RegexKitLite):

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

正则表达式的解释:(.*)这将匹配尽可能多的字符,直到找到空格字符。然而,捕获是贪婪的,这意味着它将在最后一个空格字符之前捕获尽可能多的字符(简而言之)。

或者您可以使用NSString方法查找空格字符的最后一个匹配项,并从该行的开头到最后一个空格字符获取子字符串。

或者你可以在@" "上拆分字符串,扔掉数组中的最后一个对象,然后用@" "重新组合数组。

答案 1 :(得分:1)

  1. 使用componentsSeparatedByString:
  2. 获取lastObject,即CRC32。
  3. 使用subarrayWithRange:创建一个没有CRC32的新阵列。
  4. 使用componentsJoinedByString:重新构建文件名。
  5. 您可能希望在循环中执行第4步,重复删除最后一个对象,直到目标目录中存在文件名或者数组末尾的空字符串用完为止。这处理文件名和CRC32之间的多个空格的情况,以及以空格结尾的文件名(病态但可能)的情况。