String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
しかし、このエラーが発生しました。
スレッド「メイン」の例外 java.util.regex.PatternSyntaxException: インデックス 1 付近で予期しない内部エラーが発生しました
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
しかし、このエラーが発生しました。
スレッド「メイン」の例外 java.util.regex.PatternSyntaxException: インデックス 1 付近で予期しない内部エラーが発生しました
そのはず
String[] strArray = str.split("\\\\");
その理由は、 inRegex
に\
は特別な意味があるため、 にエスケープする必要があるためです\\
。
そしてJavaでは、\\
に等しくなければなりません"\\\\"
String.split(String regex)
メソッドはパラメータとしてaを取りますRegEx
。
の正規表現\
は\\\\
試す
String[] strArray = str.split("\\\\");
使用する理由"\\\\"
、
の正規表現\
は\\
これで、エスケープ文字ロジックを適用する\\
ものとして扱われます( =改行、= )\
\n
\\
\
だから"\\"
私たちに使用させるには"\\\\"
混乱しないことを願っています..:D
それはあまり意味がありません。元の文字列はUnicode文字を使用しており、と同じThinkPad
です。したがって、とにかく削除するスラッシュはありません。
つまり、以下のコードはThinkPad
2回出力されます。
public static void main(String args[]) {
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
System.out.println(str);
String[] strArray = str.split("\\\\");
System.out.println(Arrays.toString(strArray));
}
または、さらに明確に、以下のコードはtrueを出力します。
public static void main(String args[]) {
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String str2 = "ThinkPad";
System.out.println(str == str2);
}
エスケープに関する一般的な解決策: http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringEscapeUtils.html
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split(StringEscapeUtils.escapeJava("\\"));