[英]Split Array without delimiters?
有没有更好的(更快)方式将二进制字符串拆分为数组?
我的代码循环并在一个元素中每8个字符substring
一次。
binary = my binary string(Huge) : "1010101011111000001111100001110110101010101"
int index = 0;
while (index < binary.length()) {
int num = binaryToInteger(binary.substring(index, Math.min(index + 8,binary.length())));
l.add( num);
temp = temp+ String.valueOf(num);
index += 8;
}
我所试图做的是我的二进制字符串分割成8个字符块10101010
,然后拿到8个字符的int值,并将其存储在arraylist
女巫在这种情况下是l
我的代码正在运行,但是非常耗时。是否有更快的方法来完成此工作?
使用正则表达式很容易:
binary.split("(?<=\\G.{8})");
但是,它将创建一个字符串数组。 我不愿意创建整数数组,因为二进制字符串不适合这种类型(它们可以以“ 0”开头,而且可能很长)。
我认为在Java或Google Guavas - Splitter.fixedLength()中可以使用Regex
, substring
, split
等多种选项。
Splitter.fixedLength(8).split("1010101011111000001111100001110110101010101");
这个分割字符串,在第n个位置清楚地说明了各种功能的性能。
使用toCharArray
可能会更快:
Long time = System.currentTimeMillis();
List<Integer> l = new ArrayList<>();
int index = 0;
String binary =
"1010101011111000001111100001110110101";
char[] binaryChars = binary.toCharArray();
while (index < binaryChars.length) {
int num = 0;
for (int offset = 0; offset < Math.min(8, binary.length() - index); offset++) {
int bo = index + offset;
if (binaryChars[bo] == '1') {
num += Math.pow(2, offset + 1);
}
}
l.add(num);
index += 8;
}
System.out.println(System.currentTimeMillis() - time);
我想,由于您想分成八位,所以要解码字节而不是ints 。 这比您想象的要容易:
String binary = "1010101011111000001111100001110110101010101";
byte[] result=new BigInteger(binary, 2).toByteArray();
也许您可以尝试进行for-each循环以遍历字符串中的每个字符,将它们组合为8位值并转换为字节。 我不知道这样会不会更快,只是一个建议。
for (char c : binary.toCharArray() ) { do stuff }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.