Java8字符串分割的⼏种⽅式及性能⽐较
⼀、⽅法
  1、通过indexOf和substring这两个⽅法实现字符串分割
    实现逻辑:
      利⽤indexOf出分割的字符在字符串中的位置,根据分割字符的位置切割字符串,再将分割好的字符串放进结果集。    实现代码如下:
  /**
* @Description: 通过indexof分割字符串
* @Param: [str, regx]
java中split的用法
* @return: java.lang.String[]
* @Author: YinYichang
* @Date: 2018/7/18
*/
public static String[] splitByIndex(String str, String regx) {
//字符串截取的开始位置
int begin = 0;
//字符串截取的结束位置
int limit = 0;
//截取分割得到的字符串
String splitStr = "";
ArrayList<String> result = new ArrayList<String>();
while (str.indexOf(regx) != -1) {
//设置要截取的位置
limit = str.indexOf(regx);
splitStr = str.substring(begin, limit);
//设置截取后的字符串
str = str.substring(limit + 1, str.length());
result.add(splitStr);
}
if (!StringUtil.isBlank(str)) {
result.add(str);
}
String[] strs = new String[result.size()];
Array(strs);
}
  2、通过charAt和substring这两个⽅法实现字符串分割
    实现逻辑:
      同上,通过charAt⽅法出字符所在字符串中的位置,再实现如同⽅法1的逻辑即可得到分割后的字符串结果集。
    实现代码如下:
  /**
* @Description: 通过charAt分割字符串
* @Param: [str, regx]
* @return: java.lang.String[]
* @Author: YinYichang
* @Date: 2018/7/18
*/
public static String[] splitByCharAt(String str, char regx) {
//字符串截取的开始位置
int begin = 0;
//截取分割得到的字符串
String splitStr = "";
ArrayList<String> result = new ArrayList<String>();
int length = str.length();
//计数器
int i = 0;
for (i = 0; i < length;i++ ) {
if (str.charAt(i) == regx) {
splitStr = str.substring(begin, i);
result.add(splitStr);
str = str.substring(i + 1, length);
length = str.length();
i = 0;
}
}
if (!StringUtil.isBlank(str)) {
result.add(str);
}
String[] strs = new String[result.size()];
Array(strs);
}
  3、通过java⾃带的split⽅法分割字符串
  4、通过StringTokenizer对字符串进⾏分割
    通过这种⽅法分割字符串的使⽤频率⽐较少,这种分割需要创建新的对象(对内存造成不必要的开⽀),虽然该⽅法提供了提取分割结果的⽅法,但是也⽐较⿇烦并没有数组那么简单。 
  /**
* @Description: 通过StringTokenizer分割字符串, 该⽅
* 法分割后将结果封装并提供相关⽅法提取(很少⽤到)
* @Param: [str, regx]
* @return: StringTokenizer
* @Author: YinYichang
* @Date: 2018/7/18
*/
public static StringTokenizer splitByStringTokenizer(String str, String regx) {
StringTokenizer stringTokenizer = new StringTokenizer(str, regx);
return stringTokenizer;
}
⼆、性能测试
  由于StringTokenizer很少⽤到就不测试了,主要测试两种⾃定义的分割⽅法和java⾃带的⽅法。
  测试代码如下:
     String str = "a,b,c,d,e,f,g";
System.out.println("测试代码循环10000次。。。,结果如下:");
long length = 10000;
//indexof字符串分割测试
long begin = System.currentTimeMillis();
for (int i = 0; i < length; i++) {
String[] strs = SplitStr.splitByIndex(str, ",");
}
long end = System.currentTimeMillis();
System.out.println("indexof分割字符串返回数组⽤时:"+(end - begin));
//charAt字符串分割测试
begin = System.currentTimeMillis();
for (int i = 0; i < length; i++) {
String[] strs = SplitStr.splitByCharAt(str, ',');
}
end = System.currentTimeMillis();
System.out.println("charAt分割字符串返回数组⽤时:"+(end - begin));
//split字符串分割测试
begin = System.currentTimeMillis();
for (int i = 0; i < length; i++) {
String[] strs = str.split(",");
}
end = System.currentTimeMillis();
System.out.println("split分割字符串⽤时:"+(end - begin));
  测试结果:
以上测试结果,分别对三种⽅法循环测试1000次、10000次和100000次,由结果可以看出利⽤charAt分割字符串的效率是最⾼的。
其实,查看split⽅法的实现代码后发现,split采⽤的分割⽅式是和⾃定义的第⼀种⽅式类似的,可以看出中两者的差距不是特别⼤。
代码优化任重道远,如有问题希望给与指正!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。