Java解析 - 分隔符也可以是令牌的一部分

时间:2014-10-06 18:52:19

标签: java parsing delimiter

我有一个要解析的字符串。

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

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

1 个答案:

答案 0 :(得分: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 ***********