是否有一个免费的库,包含操作字节数组的常用方法?
它至少应该能够执行以下操作,但其他类型的数组也不错。
我知道所有这些函数都不是什么高深的魔法,但是完全实现它们并防止傻瓜& 错误,包括相应的单元测试需要一些时间。
因此,我正在寻找一个包含这些函数的(非GPL)库,有人知道这样的库吗?
我认为你的前三个问题可以通过以下方式解决。Java.util.Arrays 类,你不需要使用第三方库。
Arrays.binarySearch() method is for your first problem.
Arrays.fill() method for your second problem.
对于最后一个问题,我可以推荐一些我知道的第三方工具包。
Google的Guava,Apache的commons API可能会有帮助。
我想你可以通过把你的数组变成一个 Collection
. 如果你不想使用 Collections
而你只是在处理 byte[]
你可以做这样的事情。
public class A {
public static byte[] deleteSubarray(byte[] array, byte[] subArray) {
int p = searchFor(array, subArray);
if (p == -1)
return array;
byte[] result = new byte[array.length - subArray.length + 1];
for (int i = 0; i < p; i++)
result[i] = array[i];
for (int i = p + subArray.length - 1; i < array.length; i++) {
result[p] = array[i];
p++;
}
return result;
}
public static byte[] insertElementAt(byte[] array, byte element, int position) {
byte[] result = new byte[array.length + 1];
for (int i = 0; i <= position - 1; i++)
result[i] = array[i];
result[position] = element;
for (int i = position + 1; i < array.length; i++) {
result[i] = array[i];
}
return result;
}
public static byte[] searchAndReplace(byte[] array, byte[] search, byte[] replace) {
if (search.length != replace.length)
return array;
int p = searchFor(array, search);
if (p == -1)
return array;
byte[] result = Arrays.copyOf(array, array.length);
for (int i = 0; i < replace.length; i++) {
result[p] = replace[i];
p++;
}
return result;
}
public static int searchFor(byte[] array, byte[] subArray) {
if (subArray.length > array.length)
return -1;
int p = (new String(array)).indexOf(new String(subArray));
for (int i = 1; i < subArray.length; i++) {
if (array[p + i] != subArray[i])
return -1;
}
return p;
}
public static void main(String[] args) {
String a = "hello world!";
String b = "lo w";
System.out.println(searchFor(a.getBytes(), b.getBytes()));
System.out.println(new String(searchAndReplace(a.getBytes(), b.getBytes(), "mn x".getBytes())));
System.out.println(new String(insertElementAt(a.getBytes(), "-".getBytes()[0], 5)));
System.out.println(new String(deleteSubarray(a.getBytes(), b.getBytes())));
}
}
输出
3 helmn xorld! hello-world! helworld!
如果你也在处理其他类型的数组,那么就可以使用 searchFor
行不通,但你可以很容易地概括:)