NSString用单个换行符替换重复的换行符

时间:2013-04-08 09:48:07

标签: iphone ios objective-c nsstring

我有一个NSString,在字符串之间可以有多个\ n。我需要将\ n的多次出现替换为单个\ n。

我试过这段代码:

newString = [string stringByReplacingOccurrencesOfString:@"\n\n" withString:@"\n"];

但如果在字符串中遇到一系列“\ n \ n \ n \ n \ n \ n”,则无法获得所需的结果。在这种情况下,它们将替换为“\ n \ n \ n”。

我该怎么做才能将所有多个“\ n”替换为单个“\ n”?

感谢所有人!

更新:为已将过滤后的字符串设置为文本的UITextView添加屏幕截图。根据Attila H的回答,在编写代码后,新行似乎不止一行。 enter image description here

4 个答案:

答案 0 :(得分:16)

您可以使用NSRegularExpression。这是最简单和优雅的方式:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\n+" options:0 error:NULL];
NSString *newString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"\n"];

答案 1 :(得分:1)

您可以通过以下方式执行此操作

NSArray *arrSplit = [s componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
                s = [arrSplit componentsJoinedByString:@"\n"];

希望它可以帮到你..

答案 2 :(得分:1)

对于正在寻找更新的 Swift 4 答案的人

extension String {

   func removeMultipleNewlinesFromMiddle() -> String {
       let returnString = trimmedString.replacingOccurrences(of: "\n+", with: "\n", options: .regularExpression, range: nil)
       return (returnString)
   }
}

用法:

let str = "Hello \n\n\nWorld \n\nHow are you\n?"
print (str.removeMultipleNewlinesFromMiddle())

输出:

你好

世界

你好吗

答案 3 :(得分:-1)

你可以将这个替换放在一个循环中,直到你在你的字符串中继续创建“\ n \ n”。