日期:2014-05-20  浏览次数:20904 次

正则表达式split()迷惑...求解惑!
public void foo() {
String str = "出售[@泰兰德的香蕉,1111,1111,1@]800G!![@末日决战,2222,2222,2@]1W金....";
String[] strArr = str.split("[[\\[\\@].*[\\@\\]]]");
for (int i = 0; i < strArr.length; i++) {
System.out.println("第" + i + "个:" + strArr[i]);
}
}

输出结果为:
第0个:出售
第1个:
第2个:泰兰德的香蕉,1111,1111,1
第3个:
第4个:800G!!
第5个:
第6个:末日决战,2222,2222,2
第7个:
第8个:1W金

怎么会出现空字符串啊,干 
我就想用这则表达式的方法
用substring太麻烦,不够简练
求帮助........
------最佳解决方案--------------------

public static void foo() {
        String str = "出售[@泰兰德的香蕉,1111,1111,1@]800G!![@末日决战,2222,2222,2@]1W金....";
        String[] strArr = str.split("\\[?@\\]?");
        for (int i = 0; i < strArr.length; i++) {
            System.out.println("第" + i + "个:" + strArr[i]);
        }
    }

------其他解决方案--------------------
楼主,你用这种"[[\\[\\@].*[\\@\\]]]",它的输出结果貌似是 [ or @,空串就来自这两符号中间

但.*貌似被无视了 
------其他解决方案--------------------
2楼的结果是对的,3楼也谢谢你
就是没搞懂 怎么回事
------其他解决方案--------------------
引用:
2楼的结果是对的,3楼也谢谢你
就是没搞懂 怎么回事

揭贴好快啊楼主

.*这种在character classes中失去特殊含义了,所以被无视了
@在其中不需要转义
还有你无非是需要以[@或@]分隔,也可以(\\[@
------其他解决方案--------------------
@\\]),1楼也是这样,只是用的量词?实现