Hey String Split
A man’s best friends are his ten fingers. – 人最好的朋友是自己的十个手指.
大家都知道String字符串是长度不可变的,对它的操作,都会new成新的字符串,比如 字符串的分割,也会产生新的字符串,其值value保存在常量池中,现在就给大家说一下String中的三种分割方式.
爱码如下:
public class StringSpiltTest {
// 原始的分割 方式
private static void test1(){
long start = System.currentTimeMillis();
String orgStr = null;
// 生成 字符串
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i <10000 ; i++) {
stringBuffer.append(i);
stringBuffer.append(";");
}
orgStr = stringBuffer.toString();
// 进行分割
for (int i = 0; i <10000 ; i++) {
orgStr.split(";");
}
System.out.println("花费了--" + (System.currentTimeMillis() - start) + "ms--时间");
}
// 通过 StringTokenizer 的方式进行分割
private static void test2(){
long start = System.currentTimeMillis();
String orgStr = null;
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i <10000 ; i++) {
stringBuffer.append(i);
stringBuffer.append(";");
}
orgStr = stringBuffer.toString();
StringTokenizer stringTokenizer = new StringTokenizer(orgStr,";");
for (int i = 0; i <10000 ; i++) {
// 进行分割 完成了 spilt
while (stringTokenizer.hasMoreTokens()){
stringTokenizer.nextToken();
}
// 重新分割
stringTokenizer = new StringTokenizer(orgStr,";" );
}
System.out.println("花费了--" + (System.currentTimeMillis() - start) + "ms--时间");
}
// 通过 indexOf 以及 subString 的方法进行分割 效率高点
public static void test3(){
long start = System.currentTimeMillis();
String orgStr = null;
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i <10000 ; i++) {
stringBuffer.append(i);
stringBuffer.append(";");
}
orgStr = stringBuffer.toString();
String temp = orgStr;
for (int i = 0; i < 10000; i++) {
while (true){
String spiltStr = null;
// 找到 分隔符 `;`
int j = temp.indexOf(";");
if(j<0)
break;
// 截取字符串
spiltStr = temp.substring(0,j);
// 处理剩余字符串
temp = temp.substring(j+1);
}
}
System.out.println("花费了--" + (System.currentTimeMillis() - start) + "ms--时间");
}
public static void main(String[] args) {
test1();
test2();
test3();
}
}
测试结果:
test1 -- >花费了--4461ms--时间
test2 -- >花费了--3817ms--时间
test3 -- >花费了--70ms--时间
由此可知 String中的split是效率比较慢的,但是在开发中就需要需求进行写了,需要对各个方法进行权衡处理,采取最实用的方法.