改行(\ n)シーケンスを1つのスペースに置き換えるにはどうすればよいですか。
つまり、ユーザーが2つの改行( "\ n \ n")を入力したので、1つのスペース( "")に置き換えます。または、ユーザーが3つの改行( "\ n \ n \ n")を入力しました。これも1つのスペース( "")に置き換えてください。
改行(\ n)シーケンスを1つのスペースに置き換えるにはどうすればよいですか。
つまり、ユーザーが2つの改行( "\ n \ n")を入力したので、1つのスペース( "")に置き換えます。または、ユーザーが3つの改行( "\ n \ n \ n")を入力しました。これも1つのスペース( "")に置き換えてください。
これを試して:
NSArray *split = [orig componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
split = [split filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];
NSString *res = [split componentsJoinedByString:@" "];
仕組みは次のとおりです。
使用するよりも3倍高いパフォーマンスcomponentsSeparatedByCharactersInSet
NSString *fixed = [original stringByReplacingOccurrencesOfString:@"\\n+"
withString:@" "
options:NSRegularExpressionSearch
range:NSMakeRange(0, original.length)];
可能な代替正規表現パターン:
[ ]+
[ \\t]+
\\s+
\\n+
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:@" "]);
「s/\ n + / \ w /」のような正規表現を使用します(1つ以上の改行文字に一致し、単一の空白で置換される置換)
この質問には正規表現ライブラリへのリンクがありますが、NSRegularExpressionも利用できます