简体   繁体   中英

Split Array without delimiters?

Is there a better(Faster) way to split a binary string into an Array?

My code That loops and substring every 8 characters in one element.

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;
}

What I am trying to do is to split my binary string into pieces of 8 characters 10101010 and then get the int value of the 8 characters and will store that in arraylist witch in this case was l

My code is working but is very time consuming.. Is there a faster way of getting this done?

It's easy using regex:

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

However, it creates an array of strings. I don't get your will of creating an array of integers, since binary strings don't fit into this type (they can start with "0" and they can be really long).

I think there are mutiple options using Regex , substring , split etc available in java or Google Guavas - Splitter.fixedLength() .

Splitter.fixedLength(8).split("1010101011111000001111100001110110101010101");

This Split a string, at every nth position clearly explain the performance of various functions.

It would probably faster using 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);

Since you want to split into groups of eight bits, I guess, you want to decode bytes rather than ints . This is easier than you might think:

String binary = "1010101011111000001111100001110110101010101";
byte[] result=new BigInteger(binary, 2).toByteArray();

Maybe you can try making a for-each loop to go through each character in the string, combine them into 8-bit values and convert into bytes. I don't know if that will be faster, just a suggestion.

for (char c : binary.toCharArray() ) { do stuff }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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