在java中有没有什么好方法用不同长度的byte []替换byte []的一部分?

时间:2015-08-18 03:32:44

标签: java

我正在使用airlift.joni,一个新的正则表达式框架。 这个框架的主要功能是将字符串更改为byte [],然后执行正则表达式匹配和类似的工作。 但由于所有元素都是byte [],我不能在字符串中使用replace函数,并且必须编写自己的替换函数。

我可以在byte []中获取待替换模式的开始和结束,但不知道用新byte []替换它的正确方法是什么。

说我们有一个

byte[] A = new byte[10];

我想用A

替换A [2]到A [3]
byte[] B

其长度不得为2。 有一些好方法可以做到这一点吗? 我只想创建一个长度为A.length + B.length-2的新数组并复制每个相应的字节,但这会使代码太长。

1 个答案:

答案 0 :(得分:8)

您必须为结果分配一个新数组,然后使用System.arraycopy

byte[] a = /*Allocated and initialized elsewhere*/;
byte[] b = /*Allocated and initialized elsewhere*/;
int replaceStart = 2; // inclusive
int replaceEnd = 4; // exclusive

byte[] c = new byte[a.length - (replaceEnd - replaceStart) + b.length];
System.arraycopy(a, 0, c, 0, replaceStart);
System.arraycopy(b, 0, c, replaceStart, b.length);
System.arraycopy(a, replaceEnd, c, replaceStart + b.length, a.length - replaceEnd);