问题背景
最近,在处理高维数组的运算时,需要从txt中读取文本,并使用split()函数将每一个行的文本转化成数组。如下所示:
1.0 0.0 0.0 0.0 0.0 0.0 0.0 …
由于该数组的维度高,最开始直接使用的是String.split()函数做处理,但运行速度过慢。后面,使用StringUtils.split()函数做替代。
下面来比较这一些函数的效率。
效率比较
StringUtils.split()来自于Apache Commons Lang库,可通过下面的网址下载:
https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.10
如下为测试程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 1package sparsetest;
2
3import org.apache.commons.lang3.StringUtils;
4
5public class Test {
6
7 public static void main(String[] args) {
8 int N = 10000;
9 StringBuilder sb = new StringBuilder();
10 for (int i = 0; i < N; i++) {
11 sb.append("0.0 ");
12 }
13 String s = sb.toString();
14 long startTime = System.currentTimeMillis(); //获取开始时间
15 for (int i = 0; i < 1000; i++) {
16 String[] cS = s.split(" ");
17 }
18 long endTime = System.currentTimeMillis(); //获取结束时间
19 System.out.println("split耗时:" + (endTime - startTime) + "ms");
20 long startTime1 = System.currentTimeMillis();
21 for (int i = 0; i < 1000; i++) {
22 String[] cS1 = StringUtils.split(s," ");
23 }
24 long endTime1 = System.currentTimeMillis();
25 System.out.println("StringUtils split耗时:" + (endTime1 - startTime1) + "ms");
26 }
27
28}
29
30
31
执行该程序控制台输出结果为: