在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)
谁可以解释一下,我哪里出错了? ------解决方案-------------------- str.split("?");
___________________________
这里是正则表达式,需要转义
str.split("\\?"); ------解决方案-------------------- 在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("\\ ------解决方案-------------------- ");可以称其为二次转义。对于“+”,“*”有可能会出异常。
所以要使用"\\?"来解决这个问题 ------解决方案-------------------- ?对于java来说是个特殊字符,需要转义才能使用,str.split("\\?")这样应该就可以了。 ------解决方案--------------------