我有兩個長度不同的char數組, ,我想比較兩個數組中的前幾個字符是否相同。 例如確定在java中兩個數組的部分是否相等
char[] pngheader = new char[] { 137, 80, 78, 71 }; // PNG
char[] fileheader = new char[] { 137, 80, 78, 71 , xxx, xxx};
我想知道是否可以使用像Arrays.equals()一些優雅的方式做到這一點?
在此先感謝。
我有兩個長度不同的char數組, ,我想比較兩個數組中的前幾個字符是否相同。 例如確定在java中兩個數組的部分是否相等
char[] pngheader = new char[] { 137, 80, 78, 71 }; // PNG
char[] fileheader = new char[] { 137, 80, 78, 71 , xxx, xxx};
我想知道是否可以使用像Arrays.equals()一些優雅的方式做到這一點?
在此先感謝。
Arrays
類爲您的情況提供了一些有用的方法。
public static void main(String[] args) {
char[] pngheader = new char[] { 137, 80, 78, 71 }; // PNG
char[] fileheader = new char[] { 137, 80, 78, 71 , 1, 2};
char[] fileheader2 = new char[] { 131, 80, 78, 71 , 1, 2};
boolean equals = Arrays.equals(Arrays.copyOf(pngheader, 4),
Arrays.copyOf(fileheader, 4));
System.out.println(equals); //prints true
boolean equals2 = Arrays.equals(Arrays.copyOf(pngheader, 4),
Arrays.copyOf(fileheader2, 4));
System.out.println(equals2); //prints false
}
這也可以通過創建一個方法使其更具可重用性。
public static boolean arraysEquals(char[] arr1, char[] arr2, int length){
return Arrays.equals(Arrays.copyOf(arr1, length -1),
Arrays.copyOf(arr2, length -1));
}
//Usage
arraysEquals(pngheader, fileheader, 4);
arraysEquals(pngheader, fileheader2, 4);
在這種情況下,你不需要'Arrays.copyOf(pngheader,4)','pngheader'就足夠了。 – jlordo
@jlordo這就是說OP不希望將整個第一個數組與第二個數組進行比較。這將允許第一個數組在我們關心的索引之後有一些垃圾。 –
這將字符數組工作
char[] pngheader = new char[] { 137, 80, 78, 71 }; // PNG
char[] fileheader = new char[] { 137, 80, 78, 71 , 1, 1};
boolean res = new String(fileheader).startsWith(new String(pngheader));
System.out.println(res);
你知道字符的指數? – Janman
幾個字符的意思是?甚至0進入這個類別:-) – Ankit
你的問題有點含糊。但對於目前的情況,如果你想要一個「優雅」的方式..這是我可以想出: Arrays.equals(pngheader,Arrays.copyOf(fileheader,pngheader.length)); – Akash