web-dev-qa-db-ja.com

Javaは正規表現\ sでは動作しません、言います:無効なエスケープシーケンス

文字列内のすべての空白文字を「+」で置き換え、すべての「ß」を「ss」で置き換えたい...「ß」ではうまく機能しますが、Eclipseでは\ sを空白に使用できません。 。代わりに「\ t」を試してみましたが、どちらも機能しません。次のエラーが表示されます。

無効なエスケープシーケンス(有効なエスケープシーケンスは\ b\t\n\f\r\"\ '\)

これは私のコードです:

try {
    String temp1 = from.getText().toString();
    start_from  = temp1.replaceAll("ß", "ss");
    start_from  = start_from.replaceAll("\s", "+");
}

なぜ機能しないのですか? Android、Eclipse、または何に問題がありますか?

前もって感謝します!

38
MJB

スラッシュをエスケープする必要があります

start_from  = start_from.replaceAll("\\s", "+");
60
Rob Di Marco

問題はそれです \は、Java だけでなく正規表現パターンのエスケープ文字です。正規表現パターンに一致させたい場合は\n、言う、そしてあなたは先に行き、書くだろう

replaceAll("\n", "+");

正規表現パターンは\n"\n"はJavaを意味します。 パターンにバックスラッシュを含める場合は、そのバックスラッシュをエスケープして、文字列内で特殊文字として扱われないようにする必要があります。

replaceAll("\\s", "+");
9
David Hedlund

Java.util.regex.Patternクラスを使用し、p = Pattern.compile("\s");のようなものをp.matcher(start_from).replaceAll("+")と組み合わせて使用​​できます。または、「\ s」メタ文字を「\\ s」としてエスケープします。

1
Dustin