Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java split function

Can somebody help me in understanding how split in java works.I have the following code

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]+")";

however at the split function i get the following exception

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)
like image 799
ayush Avatar asked Mar 10 '11 09:03

ayush


2 Answers

When you type "\\", this is actually a single backslash (due to escaping special characters in Java Strings).

Regular expressions also use backslash as special character, and you need to escape it with another backslash. So in the end, you need to pass "\\\\" as pattern to match a single backslash.

like image 135
Konrad Garus Avatar answered Oct 02 '22 22:10

Konrad Garus


\ is a special character in regular expressions, as well as in Java string literals. If you want a literal backslash in a regex, you have to double it twice. Try \\\\ (becomes \\ once lexed, becomes a literal \ to the regex parser).

like image 39
user Avatar answered Oct 02 '22 21:10

user