是否有更好(更快)的方法将二进制字符串拆分为数组?
我的代码在一个元素中循环并substring
每个 8 个字符。
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
女巫中
我的代码正在运行但非常耗时。有没有更快的方法来完成这项工作?
答案 0 :(得分:2)
使用正则表达式很容易:
binary.split("(?<=\\G.{8})");
但是,它会创建一个字符串数组。我不会得到你创建一个整数数组的意愿,因为二进制字符串不适合这种类型(它们可以从&#34; 0&#34开始;它们可能真的很长)。 / p>
答案 1 :(得分:0)
我认为使用Regex
,substring
,split
等在java或Google Guavas - Splitter.fixedLength()中提供了多种选项。
Splitter.fixedLength(8).split("1010101011111000001111100001110110101010101");
这Split a string, at every nth position清楚地解释了各种功能的表现。
答案 2 :(得分:0)
使用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);
答案 3 :(得分:0)
由于你想分成8位组,我想,你想要解码 bytes 而不是 ints 。这比你想象的要容易:
String binary = "1010101011111000001111100001110110101010101";
byte[] result=new BigInteger(binary, 2).toByteArray();
答案 4 :(得分:-2)
也许您可以尝试使用for-each循环遍历字符串中的每个字符,将它们组合成8位值并转换为字节。我不知道这会更快,只是一个建议。
for (char c : binary.toCharArray() ) { do stuff }