算法--字符串分隔符/字符串匹配算法

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...

ctgu_czy
posted @ 2017-01-12 09:54  ctgu_czy  阅读(841)  评论(0编辑  收藏  举报