3

このコードが機能しないのはなぜですか?

public static void main(String[] args) {
    String s = "You need the new version for this. Please update app ...";
    System.out.println(s.replaceAll(". ", ".\\\\n").replaceAll(" ...", "..."));
}

これは私の欲しい出力です:

これには新しいバージョンが必要です。\nアプリを更新してください...

情報のおかげで

4

4 に答える 4

3

String.replaceAllメソッドは、最初の引数として正規表現を取ります。

したがって、ドット.)は、任意の文字に一致する正規表現で特別な意味を持つため、エスケープする必要があります。

System.out.println(s.replaceAll("\\. ", ".\\\\n").replaceAll(" \\.\\.\\.", "..."));

String.replaceただし、指定された入力に対しては、を使用しないため、メソッドを使用するだけRegexで済み、その利点が追加されます。

于 2012-11-22T15:14:29.140 に答える
1

.は特別な正規表現文字であり、何にでも一致します。あなたはこのようにそれを脱出する必要があります:\\.

したがって、3つのドットを一致させるには、次の正規表現を使用する必要があります。"\\.\\.\\."

あなたが欲しいのは

s.replaceAll("\\. ", ".\n").replaceAll(" \\.\\.\\.", "...")
于 2012-11-22T15:14:32.427 に答える
1

使用するべきではありませんreplaceAll-replace代わりに使用してください。replaceAllここで必要ない場合は正規表現を取ります(したがって、不必要に非効率になります)。

String s = "You need the new version for this. Please update app ...";
System.out.println(s.replace(". ", ".\\n").replace(" ...", "..."));

".\\\\n"(また、ここで置き換えたことにも注意して".\\n"ください。これにより、目的の出力が生成されます。)

于 2012-11-22T15:16:22.640 に答える
0

として試してください

    System.out.println(s.replace(". ", ".\n").replace(" ...", "..."));

これは与える

You need the new version for this.
Please update app...
于 2012-11-22T15:19:47.040 に答える