public static void main(String[] args) {
String str = "http://www.baidu.com.cn?name1=value1&name2=value2&name3=value3";
String[] arr = str.split("?"); -------①
}在eclipse中执行上面的代码,执行到①行时,提示下面的错误信息:
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0
?
^
at java.util.regex.Pattern.error(Pattern.java:1700)
at java.util.regex.Pattern.sequence(Pattern.java:1865)
at java.util.regex.Pattern.expr(Pattern.java:1739)
at java.util.regex.Pattern.compile(Pattern.java:1447)
at java.util.regex.Pattern.<init>(Pattern.java:1130)
at java.util.regex.Pattern.compile(Pattern.java:822)
at java.lang.String.split(String.java:2293)
at java.lang.String.split(String.java:2335)
at test.Test.main(Test.java:10)
谁可以解释一下,我哪里出错了?

解决方案 »

  1.   

    &会不会是这个引起的???
      

  2.   

    str.split("?");
    ___________________________
    这里是正则表达式,需要转义
    str.split("\\?");
      

  3.   

    在java中的split()方法中,如果你不小心选择特殊的分隔符如“|”,“+”,“*”等时,出现意料之外的结果。如:     String str = "I|like|java";    String[] strArray = str.split("|");    for(String tmp : strArray){      System.out.print(tmp);    } 输出的结果:I | l i k e | j a v a 这肯定不是你想要的结果:如果想要达到你的目的。String[] strArray = str.split("|");应改为String[] strArray = str.split("\\|");可以称其为二次转义。对于“+”,“*”有可能会出异常。 
    所以要使用"\\?"来解决这个问题
      

  4.   

    str.split("\\?");  使用正则表达式试试
      

  5.   

    ?对于java来说是个特殊字符,需要转义才能使用,str.split("\\?")这样应该就可以了。
      

  6.   


    ? 在正则表达式中 表示 0个或者多个, 具有特殊含义。
    并不是对于java是特殊字符。
    java中的split 方法要求的是 正则表达式作为参数,而不是普通意义的字符串
    因此,lz如果需要将字符串 用 "?"切分,则需要做转义,让 ? 表达其字面意义,而不是 正则含义
    也就是我说的:
    楼上两位答案正确,解释错误。:)