split一段数据,用逗号做分割符。 数据中可能本身有逗号,所以前面加了\表示这个逗号是转义。这个不是我设计的,所以输入就是这个样子了。
现在读取的时候要分段,复杂一点当然有办法搞定这个,但是我想问有没有办法让split直接搞定的?                String mm = "this,is,a\\, test";
String[] rst = mm.split("[^\\\\]\\,");
for (String x: rst){
System.out.println(x);
}这个结果不对:
thi
i
a\, test请求支援!

解决方案 »

  1.   

    应该不行,split是按全匹配处理的,你这个\\相当于编译原理里面的前导,但正则没有机制去“吐出”一个前导字符。但仍然不排除可以使用些简易的方式通过Pattern进行批量操作,因为split本身也只是一句话:
    public String[] split(String regex, int limit) {
      return Pattern.compile(regex).split(this, limit);
    }这个需要再想想,建议楼主把问题导向为这个方向。
      

  2.   

    for example
    String mm = "this,is,a\\, test";
    String[] rst = mm.split("(?![\\\\])[,]");
    for (String x: rst){
        System.out.println(x);
    }
      

  3.   

    不知道LZ想要的结果是什么?
    String mm = "this,is,a\\, test";
    String[] rst = mm.split("(?<![\\\\])[,]");
    for (String x: rst){
        System.out.println(x);
    }
    这个是表示 ,前不为\的匹配 LZ想要的结果应该是这个吧之前写的那个刚好反过来,,后不为\的匹配
      

  4.   

    这样不行吗?               String mm = "this,is,a\\, test";
            String[] rst = mm.split("\\\\,");
            for (String x: rst){
                System.out.println(x);
            }没看懂你在说什么
      

  5.   

    1.加入分隔符之前先用一个特殊符号,如@,将数据中的逗号替换掉,然后再加入逗号作为分隔符。
    2.split之后,将数组中的所有@再替换为逗号。