拆分数组没有分隔符?

时间:2015-10-08 12:43:31

标签: java arrays

是否有更好(更快)的方法将二进制字符串拆分为数组?

我的代码在一个元素中循环并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女巫中

我的代码正在运行但非常耗时。有没有更快的方法来完成这项工作?

5 个答案:

答案 0 :(得分:2)

使用正则表达式很容易:

binary.split("(?<=\\G.{8})");

但是,它会创建一个字符串数组。我不会得到你创建一个整数数组的意愿,因为二进制字符串不适合这种类型(它们可以从&#34; 0&#34开始;它们可能真的很长)。 / p>

答案 1 :(得分:0)

我认为使用Regexsubstringsplit等在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 }