iPhone-SDK:从段落字符串中删除空格?

时间:2009-09-15 07:52:14

标签: iphone

我在一个字符串中有两个段落。但是内容在段落字符串之间有很多空格。我想从这个大段落字符串中删除空格。我试过用 NSString * outPutStr = [outPutStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 但它不会删除段落字符串中的空格。它什么都不做。

有人可以指导我提供样品吗?

感谢。

来福/

4 个答案:

答案 0 :(得分:5)

如果你使用了很棒的框架RegexKitLite,它非常容易嵌入到iPhone项目中:

NSString *cleanString = [yourStringWithWhiteSpaces stringByReplacingOccurrencesOfRegex:@" +" withString:@" "];

这表示只要有一个空格,任何时候发现任何长度超过1个字符的空格。我不知道你的来源,但你可以使用简单的

为新行和回车做同样的事情
NSString *cleanerString = [cleanString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSString *theCleanestString = [cleanerString stringByReplacingOccurrencesOfString:@"\r" withString:@""];

注意*在代码中有更简洁的方法,将它们合并为一步,但这是一种分解方法,因此您可以轻松了解正在进行的操作并有助于调试。

答案 1 :(得分:4)

听起来你想保留的单词之间有单个空格,但你可能想要删除段落之间的一系列空格。有多种方法可以做到这一点,但这里有一个很容易编码的方法:

NSMutableString* newStr = [NSMutableString stringWithString:oldStr];
NSUInteger numReplacements;
do {
  NSRange fullRange = NSMakeRange(0, [newStr length]);
  numReplacements = [newStr replaceOccurrencesOfString:@"  " withString:@" "
                                               options:0 range:fullRange];
} while(numReplacements > 0);

了解replaceOccurrencesOfString:withString:options:range:方法(NSMutableString)以查看详细信息。

这不是最有效的,但它可以工作,如果你只使用少量不大的字符串,执行速度就不会很大。

顺便说一下,你需要多次进行替换,因为,例如,只做一次可以用两个连续的空格替换四个连续的空格,你仍然会留下多个空格。

答案 2 :(得分:0)

将非空格字符所包围的所有空格字符替换为不太可能位于字符串中的字符,如“•”。 (您可以搜索文本以找到这样的字符。在好的空格字符之后,您要保留的字符将替换为该字符,然后通过并删除每个空格字符(或用一个空格替换它们)。 ,通过并用空格替换•字符。

答案 3 :(得分:0)

我建议在NSString上添加一个类别,以这种方式规范化字符串。

@implementation NSString (NormalizedString)

-(NSString*)stringByNormalizingCharacterInSet:(NSCharacterSet*)characterSet
                                   withString:(NSString*)replacement;
{
  NSMutableString* result = [NSMutableString string];
  NSScanner* scanner [NSScanner scannerWithString:self];
  while (![scanner isAtEnd]) {
    if ([scanner scanCharactersFromSet:characterSet intoString:NULL) {
      [result appendString:replacement];
    }
    NSString* stringPart = nil;
    if ([scanner scanUpToCharactersFromSet:characterSet intoString:&stringPart]) {
      [result appendString:stringPart];
    }
  }
  return [[result copy] autorelease];
}

@end