2014-10-06 44 views
0

我有一个字符串需要解析。Java解析 - 分隔符也可以是令牌的一部分

 M|N| | |"DANGER| AWESOME"|N|N| | | | 

分隔符是管道符号(|)。但是管道可以是令牌的一部分。在这种情况下,它用双引号括起来。是否有我可以使用的现有库/函数,可以指定分隔符或开/关定界符(|“和”|)。 StringTokenizer不起作用,因为它会在DANGER |中计数管道真棒分隔符。我觉得必须有一个解决方案比单个字符检查字符串/创建一个自定义分析器更加单调乏味。

回答

1

怎么样?

String regex = "\\|(?=([^\"]*\"[^\"]*\")*[^\"]*$)"; 

测试:

public static void main(String[] args) throws Exception { 
    String x = "M|N| | |\"DANGER| AWESOME\"|N|N| | | |"; 
    String regex = "\\|(?=([^\"]*\"[^\"]*\")*[^\"]*$)"; 
    String[] y = x.split(regex); 
    for(String s : y) { 
     System.out.println(s); 
    } 
    System.out.println("************* DONE ***********"); 
} 

输出:

M 
N 


"DANGER| AWESOME" 
N 
N 



************* DONE *********** 
+0

谢谢!你能否用文字解释(或指向一个破坏网站)正则表达式模式?我的正则表达式一直很可怕。 – headlikearock 2014-10-06 20:07:09

+0

我知道这个的唯一原因是因为我询问(使用逗号代替'|'作为分隔符)。 [这里是链接](http://stackoverflow.com/questions/20762375/need-a-breakdown-of-the-following-regular-expression) – gtgaxiola 2014-10-07 12:38:52