2013-05-15 4 views
0

다른 길이의 두 문자 배열 이 있고 두 배열의 처음 몇 문자가 같은지 비교하고 싶습니다. 예 :두 배열의 일부가 Java에서 같은지 확인하십시오

char[] pngheader = new char[] { 137, 80, 78, 71 }; // PNG 
char[] fileheader = new char[] { 137, 80, 78, 71 , xxx, xxx}; 

내가 Arrays.equals()와 같은 멋진 방식으로이 작업을 수행 할 수 있는지 궁금합니다.
미리 감사드립니다.

+0

당신은 문자의 인덱스를 알고 계십니까 문자 배열과 함께 작동합니까? – Janman

+1

몇 글자 뜻? 심지어 0은이 카테고리에 포함됩니다 :-) – Ankit

+0

당신의 질문은 다소 모호합니다. 하지만 현재의 경우에 대해 "우아한"방법을 원한다면 ... 이것은 내가 생각해 낼 수있는 것입니다. Arrays.equals (Arnold, Arrays.copyOf (fileheader, pngheader.length)); 이 경우 – Akash

답변

3

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); 
+0

이 있으면'Arrays.copyOf (pngheader, 4)'가 필요하지 않습니다.'pngheader '로 충분합니다. – jlordo

+0

@jlordo OP가 첫 번째 배열을 두 번째 배열과 비교하기를 원하지 않는다. 이렇게하면 첫 번째 배열은 우리가 염려하는 인덱스 다음에 약간의 쓰레기를 가질 수 있습니다. –

1

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); 
관련 문제