String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
но эта ошибка возникла.
Исключение в потоке "main" java.util.regex.PatternSyntaxException: Неожиданная внутренняя ошибка рядом с индексом 1
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
но эта ошибка возникла.
Исключение в потоке "main" java.util.regex.PatternSyntaxException: Неожиданная внутренняя ошибка рядом с индексом 1
он должен быть
String[] strArray = str.split("\\\\");
причина в том, что в Regex
, \
имеет особое значение, поэтому вам нужно убежать в \\
.
и в java, \\
должен быть равен \\\\
String.split(String regex)
метод принимает как параметр a RegEx
.
RegEX для \
- \\\\
Try
String[] strArray = str.split("\\\\");
Причина использования "\\\\"
,
Regex для \
есть \\
Теперь \\
рассматривается как \
применяет логику escape-символа (\n
= новая строка, \\
= \
)
Итак, чтобы иметь "\\"
, мы используем "\\\\"
Надеюсь, что это не смущает..: D
Это не имеет большого смысла. Ваша исходная строка использует символы Unicode и равна ThinkPad
. Таким образом, в любом случае нет никакой косой черты.
Другими словами, приведенный ниже код дважды печатает ThinkPad
:
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("\\"));