10

改行(\ n)シーケンスを1つのスペースに置き換えるにはどうすればよいですか。

つまり、ユーザーが2つの改行( "\ n \ n")を入力したので、1つのスペース( "")に置き換えます。または、ユーザーが3つの改行( "\ n \ n \ n")を入力しました。これも1つのスペース( "")に置き換えてください。

4

4 に答える 4

14

これを試して:

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

仕組みは次のとおりです。

  • 改行文字による最初の行の分割
  • 2行目は、行の複数の区切り文字に挿入された空のアイテムを削除します
  • 3行目は、新しい区切り文字として単一のスペースを使用して文字列を結合します
于 2012-07-06T11:03:07.513 に答える
13

使用するよりも3倍高いパフォーマンスcomponentsSeparatedByCharactersInSet

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

可能な代替正規表現パターン:

  • スペースのみを交換してください。[ ]+
  • スペースとタブを交換します。[ \\t]+
  • スペース、タブ、改行を置き換えます。\\s+
  • 改行を置き換えます:\\n+
于 2014-04-28T08:57:34.260 に答える
3

wattsonが言うように、これはで実行できますNSRegularExpressionが、コードは非常に冗長なので、複数の場所でこれを実行したい場合は、ヘルパーメソッド、または同様のNSStringメソッドを使用したカテゴリを実行することをお勧めします-[NSString stringByReplacingMatchingPattern:withString:]

NSString *string = @"a\n\na";
NSLog(@"%@", [[NSRegularExpression regularExpressionWithPattern:@"\\n+"
                                                        options:0
                                                          error:NULL]
              stringByReplacingMatchesInString:string
              options:0
              range:NSMakeRange(0, [string length])
              withTemplate:@" "]);
于 2012-07-06T11:11:46.147 に答える
0

「s/\ n + / \ w /」のような正規表現を使用します(1つ以上の改行文字に一致し、単一の空白で置換される置換)

この質問には正規表現ライブラリへのリンクがありますが、NSRegularExpressionも利用できます

于 2012-07-06T11:02:42.960 に答える