有人可以帮助我理解java中的split
如何工作。我有以下代码
String temp_array[];
String rates = "RF\\0.6530\\0.6535\\D";
String temp = rates.substring(1, rates.length());
System.out.println(temp);// prints F\0.6530\0.6535\D
String regex = "\\";
temp_array = temp.split(regex);
String insertString = "INSERT into table values("+temp_array[0]+","+temp_array[1]+","+temp_array[2]+","+temp_array[3]+")";
然而在split函数中我得到以下异常
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.split(Unknown Source)
at java.lang.String.split(Unknown Source)
at simple_hello.main(simple_hello.java:15)
答案 0 :(得分:23)
当您键入"\\"
时,这实际上是一个反斜杠(由于Java字符串中的特殊字符转义)。
正则表达式也使用反斜杠作为特殊字符,您需要使用另一个反斜杠来转义它。因此,最后,您需要将"\\\\"
作为模式传递以匹配单个反斜杠。
答案 1 :(得分:4)
\
是正则表达式中的特殊字符,也是Java字符串文字中的特殊字符。如果你想在正则表达式中使用文字反斜杠,你必须将它加倍两次。尝试\\\\
(lexed后变为\\
,成为文字\
正则表达式解析器)。
答案 2 :(得分:2)
您正尝试在反斜杠上拆分字符串,您需要使用:
String regex = "\\\\";
\
是Java字符串和正则表达式引擎的转义字符。因此,Java字符串\\
作为\
传递给正则表达式引擎,这是不完整的,因为\
必须跟随它试图逃脱的字符。
将字符串\\\\
作为\\
传递给正则表达式引擎,\
转义为\
,这实际上意味着文字\
。< / p>
答案 3 :(得分:2)
你必须以正则表达式模式转义'\'字符,所以你的正则表达式基本上是
String regex = "\\\\";
答案 4 :(得分:2)
替换
String regex = "\\";
与
String regex = "\\\\";
答案 5 :(得分:2)
你必须修复你的正则表达式。它应该是:
String regex = "\\\\";
因为双反斜杠是Java字符串的转义序列。