将数组拆分16个字符,然后将每个部分放入一个数组中

时间:2016-01-20 01:49:44

标签: java arrays

这是一个非常简单的问题,但目前我的大脑因为在这个项目的其他部分工作而受到煎炸,所以我需要帮助。我有一个大小为16的倍数的字符串(例如:大小16,32,48等)我需要将该字符串分成长度为16的较小字符串并将它们放入一个大小为string.length()/的数组中16

例如,我们说我的字符串(appendSourceBinary)是:" 1000101101001001"

这是我的非工作代码:

String[] holding = new String[appendSourceBinary.length()/16];
                int counter;
                for(int z = 0; z < appendSourceBinary.length(); z++){
                    holding[z] = appendSourceBinary.substring(z, z+16);
                }

2 个答案:

答案 0 :(得分:1)

有一个正则表达式只使用split:

String[] array = appendSourceBinary.split("(?<=\\G.{16})");

正则表达式在最后一个匹配(\G)之后的16个字符(.{16})之前分裂字符串中的点(在后面查看后断言)。方便的是,\G最初设置为开始输入。

一些测试代码:

String appendSourceBinary = "A234567890123456B234567890123456C234567890123456";
String[] array = appendSourceBinary.split("(?<=\\G.{16})");
Arrays.stream(array).forEach(System.out::println);

输出:

A234567890123456
B234567890123456
C234567890123456

答案 1 :(得分:0)

你可以在两行中完成,没有循环,如下所示:

    String appendSourceBinary = "10101010101010101010101010101010";
    String[] split = appendSourceBinary.replaceAll("([01]{16})", "$1x").split("x");

我使用了正则表达式搜索和替换来查找字符串中的每个16个字符组,并用自己替换它们后跟x。然后我将字符串拆分为x,留下一个包含16个字符组的数组。

如果添加一个简单的循环来输出结果:

    for (int i = 0; i < split.length; i++)
        System.out.println(split[i]);

你会发现输出是

1010101010101010
1010101010101010

我使用的原始32个char字符串分成两个16个char字符串。任何余数都将作为数组的最后一个元素返回。如果输入字符串中的字符少于16个,则它们将作为第一个且唯一的数组条目返回。