简体   繁体   中英

Why does .split(“\\”) generate an exception?

I have a String representing a directory, where \\ is used to separate folders. I want to split based on "\\\\" :

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

However, this is giving me a java.util.regex.PatternSyntaxException .

As others have suggested, you could use:

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

or you could use:

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

Also, for reference:

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

will not compile, since \\s is not a valid escape sequence. Here \\t is interpreted as the tab character, what you actually want is:

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

So, now we see that in order to get a \\ in a String , we need "\\\\" .

The regular expression \\\\ matches a single backslash since \\ is a special character in regex, and hence must be escaped. Once we put this in quotes, aka turn it into a String , we need to escape each of the backslashes, yielding "\\\\\\\\" .

String#split() method takes a regex. In regex, you need to escape the backslashes. And then for string literals in Java, you need to escape the backslash. In all, you need to use 4 backslashes:

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

You need to use \\\\\\\\ instead of \\\\ .

The backslash(\\) is an escape character in Java Strings.If you want to use backslash as a literal you have to type \\\\\\\\ ,as \\ is also a escape character in regular expressions.

For more details click here

\\ has meaning as a part of the regex, so it too must be quoted. Try \\\\\\\\ .

The Java will have at \\\\\\\\ , and produce \\\\ which is what the regex processor needs to obtain \\ .

Use separators:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM