这是一个非常简单的问题,但目前我的大脑因为在这个项目的其他部分工作而受到煎炸,所以我需要帮助。我有一个大小为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);
}
答案 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个,则它们将作为第一个且唯一的数组条目返回。