22
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";

String[] strArray = str.split("\\"); 

しかし、このエラーが発生しました。

スレッド「メイン」の例外 java.util.regex.PatternSyntaxException: インデックス 1 付近で予期しない内部エラーが発生しました

4

4 に答える 4

28

そのはず

String[] strArray = str.split("\\\\");

その理由は、 inRegex\は特別な意味があるため、 にエスケープする必要があるためです\\

そしてJavaでは、\\に等しくなければなりません"\\\\"

于 2012-11-01T10:28:32.460 に答える
4

String.split(String regex)メソッドはパラメータとしてaを取りますRegEx

の正規表現\\\\\

試す

String[] strArray = str.split("\\\\");

使用する理由"\\\\"

の正規表現\\\

これで、エスケープ文字ロジックを適用する\\ものとして扱われます( =改行、= )\\n\\\

だから"\\"私たちに使用させるには"\\\\"

混乱しないことを願っています..:D

于 2012-11-01T10:29:38.587 に答える
1

それはあまり意味がありません。元の文字列はUnicode文字を使用しており、と同じThinkPadです。したがって、とにかく削除するスラッシュはありません。

つまり、以下のコードはThinkPad2回出力されます。

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);
}
于 2012-11-01T10:33:10.560 に答える
1

エスケープに関する一般的な解決策: 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("\\")); 
于 2012-11-01T10:38:16.273 に答える