缘起String的split函数,简单叙述如下:源字串=“ab~cb”
分隔符=“~”
输出:ab,cd很好。
源字串=“ab|cd”
分隔符=“|”
输出:a,b,|,c,d迷惑?什么转义符?源字串=“ab~cd”
分隔符=“”
输出:空,a,b,|,c,d空串作为分隔符是不合理的,空串无法分割字串,应该引发一个异常。源字串=“~cd”
分隔符=“~”
输出:空,c,d
源字串=“cd~”
分隔符=“~”
输出:c,d分隔符前面没有字符时,会添加一个空串元素,分隔符后面没有字符时不添加空串元素。按道理,前面加,后面也要加,空串作为元素的原理是函数的可逆性,有逆函数的函数才是优美函数,分割后的集合应该能还原源字串,可是Java的规则丑陋透了。
分隔符=“~”
输出:ab,cd很好。
源字串=“ab|cd”
分隔符=“|”
输出:a,b,|,c,d迷惑?什么转义符?源字串=“ab~cd”
分隔符=“”
输出:空,a,b,|,c,d空串作为分隔符是不合理的,空串无法分割字串,应该引发一个异常。源字串=“~cd”
分隔符=“~”
输出:空,c,d
源字串=“cd~”
分隔符=“~”
输出:c,d分隔符前面没有字符时,会添加一个空串元素,分隔符后面没有字符时不添加空串元素。按道理,前面加,后面也要加,空串作为元素的原理是函数的可逆性,有逆函数的函数才是优美函数,分割后的集合应该能还原源字串,可是Java的规则丑陋透了。
請LZ先明白什麽叫正則表達式,然後再看看API所支持的參數要求,至於語言并沒有是否垃圾之分,只有適合不適合
开发语言(PHP、C#、Java、C++、VB、Javascript、Ruby)
都能用正则,关java什么事
我感觉设计时没有人做统一规划,所以导致其很多东西不统一。
完全没有美感而言。
其次,我们在使用字串的时候,有多少时候在使用正则表达式呢?1%一下,为了一个不经常使用的功能让其它99%的情况下都有考虑这种情况,这不是丑陋吗?
这就是我写的: public static String[] SplitString(String str,String sp){
String sub;
int pos = 0;
ArrayList<String> sl = new ArrayList<String>();
while(true){
int spos = str.indexOf(sp,pos);
if(spos<0){
sub = str.substring(pos);
sl.add(sub);
break;
}
sub = str.substring(pos,spos);
sl.add(sub);
pos = spos + 1;
}
return (String[])sl.toArray(new String[0]);
}
一個不看API,不懂正則,就説那個這個,唉明白了正則,可以互逆
正則是一個很常用的方式,用途也很多不再回此貼了,回了也白回
其次,什么叫不可逆?拿C#举例:String[] array = str.Split(',', '|'); // public string[] Split(params char[] separator);你倒来个逆向工程,告诉我,array = {"ab","cdef","","x"},原始的String str = "ab,cdef,|x";还是其他什么?
然后,你认为只有1%的机会,我却认为至少50%的机会。我俩的场景不同,没什么可以争论的。但是我可以告诉你,无论哪种格式,永远是解析难度》编码难度。所以,如果支持正则,相对来说,能够解决的问题更多。
最后,先不说你的代码会抛空指针异常。你测试过没有?如果sp参数只允许一位字符的话,请使用char做参数类型。否则请考虑如下情况:
System.out.println(Arrays.toString(SplitString("aabb", "ab")));