算法--字符串分隔符/字符串匹配算法
1.用split(" "),严格区分空格个数(不实用)
输入:
1 2 3 qwe =
输出
aStrings.length:7
######:1
######:2
######:
######:3
######:
######:qwe
######:=
2.用substring,截图某个字符串,(不实用)
substring(int beginIndex),该子字符串从beginIndex处的字符开始,直到此字符串末尾。
substring(int beginIndex, int endIndex),该子字符串从指定的 beginIndex 处开始,直到索引 endIndex – 1 处的字符.
3.StringTokenizer(实用),不区分空格个数
String ip = "192.168.128.33"; StringTokenizer token=new StringTokenizer(ip,"."); while(token.hasMoreElements()){ System.out.print(token.nextToken()+" "); }
但是StringTokenizer对于字符串"192.168..33"的分割,返回的字符串数组只有3个元素,对于两个分隔符之间的空字符串会忽略,这个要慎重使用。
但是String.split(String.split是用正则表达式匹配,所以不使用KMP字符串匹配算法)用的都是按顺序遍历的算法,所以split时间复杂度O(m*n),较高,所以性能上,StringTokenizer好很多,对于频繁使用字符串分割的应用,例如etl数据处理,使用StringTokenizer性能可以提高很多。
附件:KMP算法(俗称:看毛片算法),实质是一个字符串匹配算法;
复杂度是O(n+m);
首先了解,下经典的字符串匹配算法,
要从字符串n中找出与m匹配的字符串(n>=m);
在最坏情况下,时间复杂度为O[(n-m+1)*m];
耗费时间的地方在于,eg: n = banananobano , m = nano ;
当有效位移 = 2 时,我们可以匹配nan,第四位n明显不与o匹配,这时经典算法的做法是:有效位移+1=3,但是an明显不与m匹配,这就是在浪费时间了;
而KMP算法是直接跳过这些步奏,也就是说匹配完有效位移 = 2 ,发现nan的第四位不与m匹配时,往后移的an显然也是不与m匹配的,所以我们kmp算法匹配有效位移=4的这地方;
kmp算法最精髓的地方在于覆盖函数算法以及字符串匹配算法;
详细算法知识,参考:
http://blog.csdn.net/power721/article/details/6132380
http://blog.csdn.net/yutianzuijin/article/details/11954939/
over...