次のコードは、Javaのクラスのreplace()
メソッドを使用しています。String
String a = "abc/xyz";
System.out.println(a.replace("/", "\\"));
/
指定された文字列内で。a
に置き換えられてい\
ます。
次のような方法を使用すると、同じことが間違ってreplaceAll()
います。
System.out.println(a.replaceAll("/", "\\"));
例外java.lang.StringIndexOutOfBoundsException
がスローされます。この方法では当てはまらない正規表現を使用する\
ため、次のような2つの追加の円記号が必要です。replaceAll()
replace()
System.out.println(a.replaceAll("/", "\\\\"));
a.replaceAll("/", "\\")
唯一の問題は、このスローのように2つのスラッシュだけでこのメソッドを使用すると、なぜこのメソッドが使用されるのかということjava.lang.StringIndexOutOfBoundsException
です。
一方、このsplit()
メソッドは最初に警告を発行しますInvalid regular expression: Unexpected internal error
(NetBeans 6.9.1を使用しています)。
String b="abc\\xyz";
System.out.println(b.split("\\")[0]+b.split("\\")[1]); //Issues a warning as specified.
これを実行しようとすると、例外java.util.regex.PatternSyntaxException
がスローされます。
のような正規表現を使用するため、replaceAll()
4つのバックスラッシュが必要です。
System.out.println(b.split("\\\\")[0]+b.split("\\\\")[1]);
a.replaceAll("/", "\\\\");
前の場合のように、無効なパターンがあるにもかかわらず、なぜそのような警告またはそのような実行時例外を発行しないのですか?