閒來無事,比比看。
java
/**app
* 模式匹配-BF、KMP、JavaString.indexOf、BM大比拼spa
*/.net
package javay.test;get
import javay.util.PMBF;io
import javay.util.PMBM;class
import javay.util.PMKMP;test
/**import
* 模式匹配-BF、KMP、JavaString.indexOf、BM大比拼im
* @author DBJ
*/
public class TestPM {
/**
* @param args
*/
public static void main(String[] args) {
/* 創建 目標串 */
StringBuffer buf = new StringBuffer();
long start_001 = System.currentTimeMillis();
for (int i = 0; i < 10000000; i ++) {
buf.append("abace");
}
buf.append("abcde");
String src = buf.toString();
long end_001 = System.currentTimeMillis();
System.out.println("創建目標串消耗的時間:" + (end_001 - start_001) + "毫秒");
/* 創建 模式串 */
String ptn = "abcde";
int pos = -1;
/* Brute-Force */
long start_01 = System.currentTimeMillis();
pos = PMBF.patternMatch(src, ptn);
long end_01 = System.currentTimeMillis();
System.out.println("BF 消耗的時間:" + (end_01 - start_01) + "毫秒");
System.out.println(pos);
/* Knuth-Morris-Pratt */
long start_02 = System.currentTimeMillis();
pos = PMKMP.patternMatch(src, ptn);
long end_02 = System.currentTimeMillis();
System.out.println("KMP消耗的時間:" + (end_02 - start_02) + "毫秒");
System.out.println(pos);
/* String */
long start_03 = System.currentTimeMillis();
pos = src.indexOf(ptn);
long end_03 = System.currentTimeMillis();
System.out.println("indexOf消耗的時間:" + (end_03 - start_03) + "毫秒");
System.out.println(pos);
/* Boyer-Moore */
long start_05 = System.currentTimeMillis();
pos = PMBM.patternMatch(src, ptn);
long end_05 = System.currentTimeMillis();
System.out.println("BM 消耗的時間:" + (end_05 - start_05) + "毫秒");
System.out.println(pos);
}
}
結果:
建立目標串消耗的時間:1248毫秒
BF 消耗的時間:1062毫秒
50000000
getNext消耗的時間:0毫秒
KMP1消耗的時間:874毫秒
KMP消耗的時間:874毫秒
50000000
indexOf消耗的時間:313毫秒
50000000
BM 消耗的時間:218毫秒
50000000
Java的String不錯呀。