我有一个像这样的NSString:
rocks.mp3的音乐e99a65fb
问题是文件名(musicthatrocks.mp3
)和CRC32校验和(e99a65fb
)之间可能有更多的空格,然后是一个。如何将线分成数组?
我想过使用componentsSeparatedByString,但我的问题是文件名也可以包含空格。
提前致谢。
答案 0 :(得分:2)
如果您对正则表达式没问题,可以这样做。例如(使用RegexKitLite):
NSString * fileName = [line stringByMatching:@"(.*)\\s" capture:1];
正则表达式的解释:(.*)
这将匹配尽可能多的字符,直到找到空格字符。然而,捕获是贪婪的,这意味着它将在最后一个空格字符之前捕获尽可能多的字符(简而言之)。
或者您可以使用NSString
方法查找空格字符的最后一个匹配项,并从该行的开头到最后一个空格字符获取子字符串。
或者你可以在@" "
上拆分字符串,扔掉数组中的最后一个对象,然后用@" "
重新组合数组。
答案 1 :(得分:1)
componentsSeparatedByString:
。lastObject
,即CRC32。subarrayWithRange:
创建一个没有CRC32的新阵列。componentsJoinedByString:
重新构建文件名。您可能希望在循环中执行第4步,重复删除最后一个对象,直到目标目录中存在文件名或者数组末尾的空字符串用完为止。这处理文件名和CRC32之间的多个空格的情况,以及以空格结尾的文件名(病态但可能)的情况。