2012-07-06 50 views
9

如何用一個空格替換換行符(\ n)序列。Objective-C - 用一個空格替換換行符

即用戶輸入了一個雙換行符(「\ n \ n」)我想用一個空格替換(「」)。或者用戶輸入了三重換行符(「\ n \ n \ n」),我想用一個空格替換(「」)。

回答

11

試試這個NSRegularExpression:

NSArray *split = [orig componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 
split = [split filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]]; 
NSString *res = [split componentsJoinedByString:@" "]; 

這是它如何工作的:

  • 第一線分割的換行符
  • 第二行刪除一行
  • 三線連接字符串後面使用一個單一的空間作爲新的分隔符
+0

謝謝你,接受你的答案爲是最簡單的可讀性。 – 2012-07-06 13:02:36

0

使用正則表達式,類似「S/\ N +/\ W /」(一個替換將匹配1個或多個新行字符,並用一個空格替換)

這個問題有一個link到正則表達式庫,但它有太多

2

由於wattson說你插入多個分隔空項目可以用NSRegularExpression來做到這一點,但代碼是非常冗長的,所以如果你想在幾個地方做到這一點,我建議你做一個幫手方法,或者甚至用類似-[NSString stringByReplacingMatchingPattern:withString:]或類似方法的NSString類別。

NSString *string = @"a\n\na"; 
NSLog(@"%@", [[NSRegularExpression regularExpressionWithPattern:@"\\n+" 
                 options:0 
                  error:NULL] 
       stringByReplacingMatchesInString:string 
       options:0 
       range:NSMakeRange(0, [string length]) 
       withTemplate:@" "]); 
10

3倍,比使用componentsSeparatedByCharactersInSet

NSString *fixed = [original stringByReplacingOccurrencesOfString:@"\\n+" 
                withString:@" " 
                 options:NSRegularExpressionSearch 
                  range:NSMakeRange(0, original.length)]; 

可能的替代正則表達式模式更好的性能:

  • 僅更換空間:[ ]+
  • 替換空間和標籤:[ \\t]+
  • 替換空間,標籤和換行:\\s+
  • 更換新行:\\n+