我有一个未经过滤的字符串,可能有也可能没有多余的空格。例如,我们有以下字符串:
NSString *testData= @"Jim Bob Marcus Trent Mark\n\n
Megan Laurie Andrea Katherine\n
Dylan Liam Bernard\n
\n
Tim Thomas Britney Marcus";
这是一个示例字符串,具体取决于从服务器收到的内容。有时字符串可能是完美的,有时可能会有更多的空白区域。基本上我希望在名称之间只有常规的空格,每行末尾只有一个\ n。如何删除多余的空白区域(多于常规空间)以及多一条新线路?
我试过
stringReplaceOccurencesOfString
但这并未涵盖所有情况。
任何人都可以帮助我吗?谢谢
答案 0 :(得分:3)
有许多奇特的方法可以做到这一点,但这是最易读和易懂的方法之一(并且非常简单):
NSString *testData= @"Jim Bob Marcus Trent Mark\n\n"
"Megan Laurie Andrea Katherine\n"
"Dylan Liam Bernard\n"
"\n"
"Tim Thomas Britney Marcus";
// Remove duplicate spaces
while ([testData rangeOfString:@" "].location != NSNotFound)
testData = [testData stringByReplacingOccurrencesOfString:@" " withString:@" "];
// Remove duplicate newlines
while ([testData rangeOfString:@"\n\n"].location != NSNotFound)
testData = [testData stringByReplacingOccurrencesOfString:@"\n\n" withString:@"\n"];
NSLog(@"\n%@", testData);
// Results:
// Jim Bob Marcus Trent Mark
// Megan Laurie Andrea Katherine
// Dylan Liam Bernard
// Tim Thomas Britney Marcus
请注意,我从这个答案中复制了这种技巧:https://stackoverflow.com/a/9715463/937822 如果您喜欢这个解决方案,请向上投票。 :)
还有更有效的方法可以做到这一点。如果您正在处理大量数据且性能不够好,那么循环使用单个字符并使用较低级别的C技术手动处理字符串可能是最简单的:
NSString *testData= @"Jim Bob Marcus Trent Mark\n\n"
"Megan Laurie Andrea Katherine\n"
"Dylan Liam Bernard\n"
"\n"
"Tim Thomas Britney Marcus";
// Create our C character arrays
const char *sourceString = [testData UTF8String];
int len = strlen(sourceString);
char *destString = malloc(len * sizeof(char));
// Remove the duplicate spaces and newlines by not copying them into the destination character array.
char prevChar = 0;
int y = 0;
for (int i = 0; i < len; i++)
{
if (sourceString[i] == ' ' && prevChar == ' ')
continue;
if (sourceString[i] == '\n' && prevChar == '\n')
continue;
destString[y++] = sourceString[i];
prevChar = sourceString[i];
}
destString[y] = '\0';
// Create the new NSString object
NSString *trimmedString = [NSString stringWithUTF8String:destString];
// Free our memory
free(destString);
NSLog(@"\n%@", trimmedString);
// Results:
// Jim Bob Marcus Trent Mark
// Megan Laurie Andrea Katherine
// Dylan Liam Bernard
// Tim Thomas Britney Marcus
答案 1 :(得分:0)
查看NSRegularExpression或NSScanner。 此外,NSString还提供以下方法
更换子串 - stringByReplacingOccurrencesOfString:withString: - stringByReplacingOccurrencesOfString:withString:options:range: - stringByReplacingCharactersInRange:withString: