为什么.split(“\\”)会生成异常?

时间:2013-08-10 20:22:39

标签: java string split

我有一个表示目录的String,其中\用于分隔文件夹。我想根据"\\"进行拆分:

String address = "C:\\saeed\\test";
String[] splited = address.split("\\");

但是,这给了我一个java.util.regex.PatternSyntaxException

5 个答案:

答案 0 :(得分:7)

正如其他人所建议的那样,您可以使用:

String[] separated = address.split("\\\\");

或者你可以使用:

String[] separated = address.split(Pattern.quote("\\")); 

另外,供参考:

String address = "C:\saeed\test";

将无法编译,因为\s不是有效的转义序列。这里\t被解释为制表符,你真正想要的是:

String address = "C:\\saeed\\test";

所以,现在我们看到为了在\中获得String,我们需要"\\"

正则表达式{{1}匹配单个反斜杠,因为\\是正则表达式中的特殊字符,因此必须进行转义。一旦我们将它放在引号中,又称它为\,我们需要转义每个反斜杠,产生String

答案 1 :(得分:3)

String#split()方法采用正则表达式。在正则表达式中,您需要逃避反斜杠。然后对于Java中的字符串文字,您需要转义反斜杠。总之,你需要使用4个反斜杠:

String[] splited = address.split("\\\\");

答案 2 :(得分:1)

您需要使用\\\\代替\\

  

反斜杠(\)是Java Strings中的转义字符。如果要将反斜杠用作文字,则必须键入\\\\,因为\也是正则表达式中的转义字符。

有关详情,请点击here

答案 3 :(得分:1)

\具有作为正则表达式一部分的含义,所以它也必须引用。试试\\\\

Java将在\\\\处生成\\,这是正则表达式处理器获取\所需的内容。

答案 4 :(得分:0)

使用分隔符:

String address = "C:\saeed\test";
String[] splited = address.split(System.getProperty("file.separator"));