エラー部分をWebアプリケーションから分離するために、簡単なコードスニペットを用意しました。
public class Main {
public static void main(String[] args) throws IOException {
System.out.print("\nEnter a string:->");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String temp = br.readLine();
String words[] = temp.split(".");
for (int i = 0; i < words.length; i++) {
System.out.println(words[i] + "\n");
}
}
}
WebアプリケーションJSFの構築中にテストしました。上記のコードでtemp.split(".")
が機能しない理由を知りたいだけです。声明、
System.out.println(words[i]+"\n");
コンソールに何も表示されないということは、ループを通過しないことを意味します。 temp.split()
メソッドの引数を他の文字に変更すると、通常どおり正常に機能します。何が問題なのでしょうか?
Java.lang.String.split
は正規表現で分割され、正規表現の.
は「任意の文字」を意味します。
temp.split("\\.")
を試してください。
split()
のドキュメント は次のとおりです。
この文字列を、指定された正規表現の一致で分割します。
(エンファシス鉱山。)
ドットは、正規表現構文の特殊文字です。リテラル文字列パターンに分割する場合は、split()のパラメーターで Pattern.quote()
を使用します。
String[] words = temp.split(Pattern.quote("."));
試してください:
String words[]=temp.split("\\.");
メソッドは次のとおりです。
String[] split(String regex)
「。」正規表現の予約文字です
メソッドは文字列ではなく正規表現を使用し、ドットは正規表現で特別な意味を持ちます。 split("\\.")
のようにエスケープします。二重のバックスラッシュが必要です。2番目のバックスラッシュは最初のエスケープをエスケープします。
\\.
は簡単な答えです。これがあなたの助けのための簡単なコードです。
while (line != null) {
//
String[] words = line.split("\\.");
wr = "";
mean = "";
if (words.length > 2) {
wr = words[0] + words[1];
mean = words[2];
} else {
wr = words[0];
mean = words[1];
}
}
正常に動作します。 ドキュメント を読みましたか?文字列は正規表現に変換されます。
.
は、すべての入力文字に一致する特殊文字です。
正規表現の特殊文字と同様に、\
でエスケープします。 Java文字列エスケープ用に追加の\
が必要です。
private String temp = "mahesh.hiren.darshan";
String s_temp[] = temp.split("[.]");
Log.e("1", ""+s_temp[0]);