繁体   English   中英

没有分隔符的分割数组?

[英]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()中可以使用Regexsubstringsplit等多种选项。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM