使用String.Split()方法的Java异常:悬空元字符

时间:2014-06-17 22:32:23

标签: java regex

我试图解析一个URL字符串(我通过HTML Get方法接收)并提取嵌入的选项。我想知道为什么它会在s=s.split("?")[0];

上删除异常

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0

public static void main(String[] args) {
    String s= "run.html?yse=yse1&tracefile=capacity.1Mbps_c50.txt&fd=100&rd=100&down=1&up=1&per=0.00001";
    s=s.split("?")[0];  //drops error
    String ss[]=s.split("&");
//this is a class I have that receives the array of splitted options.
    JavaRunEmulator j = new JavaRunEmulator(ss);
    System.out.println(j.getOutput());
}

1 个答案:

答案 0 :(得分:7)

documentation split()方法获取正则表达式作为输入。

public String[] split(String regex)
     

将此字符串拆分为给定正则表达式的匹配项。

字符?用于标识正则表达式中的某些patterns,包括以下某些内容

  

贪婪的量词
  X? :X,一次或根本不是

     

不情愿的量词
  X?? :X,一次或根本没有   X*? :X,零次或多次
  X +? :X,一次或多次
  X {N}? :X,正好n次
  X {N,}? :X,至少n次   X {N,M}? :X,至少n但不超过m次

     

占有量词
  X?+:X,一次或根本不是

如果你像这样逃避字符串

s=s.split("\\?")[0];

?不会被视为在模式中使用,而是原始字符串。