java分裂函数

时间:2011-03-10 09:06:57

标签: java regex arrays string split

有人可以帮助我理解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)

6 个答案:

答案 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字符串的转义序列。