首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除多余的空格

问删除多余的空格
EN

Stack Overflow用户
提问于 2013-05-20 08:11:07
回答 2查看 1K关注 0票数 1

我有一个未过滤的字符串,它可能有过多的空格,也可能没有。例如,我们有以下字符串:

代码语言:javascript
复制
NSString *testData= @"Jim Bob Marcus Trent   Mark\n\n 
                     Megan Laurie Andrea Katherine\n 
                     Dylan                Liam     Bernard\n 
                                                           \n   
                     Tim Thomas Britney    Marcus";

这是一个示例字符串,具体取决于从服务器接收的内容。有时字符串可能是完美的,有时可能会有比预期更多的空白。本质上,我希望名称之间只有一个规则的空格,并且每行的末尾只有一个\n空格。如何删除多余的空格(多于常规空格)和多个新行?

我试着去做

代码语言:javascript
复制
stringReplaceOccurencesOfString 

但这并不能涵盖所有情况。

有谁可以帮我?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-21 11:53:03

有很多奇妙的方法可以做到这一点,但这是最易读和最容易理解的方法之一(而且非常容易):

代码语言:javascript
复制
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技术手动处理字符串:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2013-05-20 14:07:25

看看NSRegularExpression或NSScanner吧。此外,NSString还提供了以下方法

替换子字符串- stringByReplacingOccurrencesOfString:withString:- stringByReplacingOccurrencesOfString:withString:options:range:- stringByReplacingCharactersInRange:withString:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16640845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档