为了大幅提高性能,另一种方法是substring()
在循环中使用:
public String[] splitStringEvery(String s, int interval) {
int arrayLength = (int) Math.ceil(((s.length() / (double)interval)));
String[] result = new String[arrayLength];
int j = 0;
int lastIndex = result.length - 1;
for (int i = 0; i < lastIndex; i++) {
result[i] = s.substring(j, j + interval);
j += interval;
} //Add the last bit
result[lastIndex] = s.substring(j);
return result;
}
例子:
Input: String st = "1231241251341351452342352456"
Output: 123 124 125 134 135 145 234 235 245 6.
它不像stevevls 的解决方案那么短,但它的效率更高(见下文),我认为将来调整起来会更容易,当然这取决于你的情况。
性能测试 (Java 7u45)
2,000 个字符长的字符串 - 间隔为3。
split("(?<=\\G.{" + count + "})")
性能(以毫秒为单位):
7, 7, 5, 5, 4, 3, 3, 2, 2, 2
splitStringEvery()
( substring()
) 性能(以毫秒为单位):
2, 0, 0, 0, 0, 1, 0, 1, 0, 0
2,000,000个字符长的字符串 - 间隔为3。
split()
性能(以毫秒为单位):
207, 95, 376, 87, 97, 83, 83, 82, 81, 83
splitStringEvery()
性能(以毫秒为单位):
44, 20, 13, 24, 13, 26, 12, 38, 12, 13
2,000,000个字符长的字符串 - 间隔为30。
split()
性能(以毫秒为单位):
103, 61, 41, 55, 43, 44, 49, 47, 47, 45
splitStringEvery()
性能(以毫秒为单位):
7, 7, 2, 5, 1, 3, 4, 4, 2, 1
结论:
该splitStringEvery()
方法要快得多(即使在 Java 7u6 中的更改之后),并且当间隔变高时它会升级。
即用型测试代码:
pastebin.com/QMPgLbG9