【问题标题】:remove excess white space去除多余的空白
【发布时间】:2013-05-14 11:58:37
【问题描述】:

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

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 

但这并不涵盖所有情况。

谁能帮帮我?谢谢你

【问题讨论】:

  • 您是否尝试过一次简单地读取 1 个字符并将其放入新的可变字符串中,如果当前字符与空格或换行符重复则跳过当前字符?
  • @rdelmar 谢谢,但如前所述,这不是客观的 c
  • @ModernCarpentry 同意!
  • @ChiquisDaCat 我几天前做过,但无法正常工作,所以我放弃了它。知道它会是什么样子吗?谢谢
  • @Teddy13 你只需要遍历字符串,但是试试maddy的链接,它更容易。

标签: ios nsstring


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    看看 NSRegularExpression 或 NSScanner。 NSString 也有以下可用的方法

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 2018-06-02
      • 2017-09-06
      • 2021-11-05
      • 1970-01-01
      相关资源
      最近更新 更多