正则表达式“\\”不适用于java中的split()方法

时间:2014-02-06 23:53:26

标签: java regex

对于我的问题,我已经完成this thread,但没有得到我的问题的帮助。我正在使用以下行:

String[] result = s.split("\\",-1);

在我的Date课程中,并致电:

Date date1 = new Date("20\01\2012");

但它不起作用。我得到一个例外:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^
    at java.util.regex.Pattern.error(Pattern.java:1924)
    at java.util.regex.Pattern.compile(Pattern.java:1671)
    at java.util.regex.Pattern.<init>(Pattern.java:1337)
    at java.util.regex.Pattern.compile(Pattern.java:1022)
    at java.lang.String.split(String.java:2313)
    at Date.<init>(Date.java:84)
    at Date.main(Date.java:279)

2 个答案:

答案 0 :(得分:6)

我认为这是你自己的Date课程,而不是java.util.Date。如果希望参数包含反斜杠,则需要编写new Date("20\\01\\2012")。您还必须将"\\\\"写为split的参数,以获得与单个反斜杠匹配的正则表达式。

原因是\是正则表达式中的特殊字符,因此必须使用另一个反斜杠来转义它。所以你想要的正则表达式实际上是\\。但是要在Java代码中输入它,必须转义每个反斜杠 - 也就是说,必须编写"\\\\"

答案 1 :(得分:5)

在正则表达式中,你需要4 \来匹配一个(正则表达式只需要两个,但它是一个Java字符串,所以你也需要转义它们):

String[] result = s.split("\\\\",-1);

现在,如果您要解析日期,请使用DateFormat#parse ...