자바에서 문자열 비교

1. 개요

이 기사에서는 Java에서 문자열 을 비교하는 다양한 방법에 대해 설명합니다 .

으로 문자열 자바에서 가장 많이 사용되는 데이터 유형 중 하나입니다, 이것은 자연적으로 매우 일반적으로 사용되는 작업입니다.

2. 문자열 비교와 문자열 클래스

2.1. 사용 "==" 비교 연산자를

"=="연산자를 사용하여 텍스트 값을 비교하는 것은 Java 초보자가하는 가장 일반적인 실수 중 하나입니다. 이는 잘못 "==" 두 가지의 참조 평등만을 검사 문자열 , 그들은 같은 객체를 참조하거나하지 않을 경우 의미한다.

이 동작의 예를 살펴 보겠습니다.

String string1 = "using comparison operator"; String string2 = "using comparison operator"; String string3 = new String("using comparison operator"); assertThat(string1 == string2).isTrue(); assertThat(string1 == string3).isFalse();

위의 예에서 두 변수가 동일한 문자열 리터럴을 가리 키기 때문에 첫 번째 어설 션이 참 입니다.

반면에 두 번째 어설 션은 리터럴로 string1 이 생성되고 new 연산자를 사용하여 string3 이 생성 되기 때문에 false 입니다. 따라서 서로 다른 객체를 참조합니다.

2.2. 사용 ) (등호를

문자열 클래스는 우선 등호 () 에서 상속 개체. 이 방법은 주소를 무시하고 두 문자열을 문자별로 비교 합니다.

길이가 같고 문자 순서가 같으면 동일하다고 간주합니다.

String string1 = "using equals method"; String string2 = "using equals method"; String string3 = "using EQUALS method"; String string4 = new String("using equals method"); assertThat(string1.equals(string2)).isTrue(); assertThat(string1.equals(string4)).isTrue(); assertThat(string1.equals(null)).isFalse(); assertThat(string1.equals(string3)).isFalse();

이 예에서 string1, string2string4 변수는 주소에 관계없이 동일한 대소 문자와 값을 갖기 때문에 동일합니다.

들어 string3 방법은 반환 , 거짓 민감한 그것의 사례로.

또한 두 문자열 중 하나가 null 인 경우 메서드는 false를 반환합니다 .

2.3. 사용 ) (equalsIgnoreCase를

equalsIgnoreCase () 메소드는 부울 값을 반환합니다. 이름에서 알 수 있듯이이 메서드 문자열 을 비교하는 동안 문자의 대 / 소문자를 무시합니다 .

String string1 = "using equals ignore case"; String string2 = "USING EQUALS IGNORE CASE"; assertThat(string1.equalsIgnoreCase(string2)).isTrue();

2.4. 사용 ) (은 compareTo를

은 compareTo () 메소드는 반환 INT의 입력 값과 두 개의 비교 문자열 전적으로 문자 단위 사전 또는 자연 순서에 기초한다.

0이 경우이 방법을 반환 문자열은 동일 또는 둘 경우 널 (null), 음의 번호 첫 번째 경우 문자열 인수 전에 제공하고, 0보다 숫자 큰 첫 번째 경우 문자열 인수 뒤에 오는 문자열.

예를 보겠습니다.

String author = "author"; String book = "book"; String duplicateBook = "book"; assertThat(author.compareTo(book)) .isEqualTo(-1); assertThat(book.compareTo(author)) .isEqualTo(1); assertThat(duplicateBook.compareTo(book)) .isEqualTo(0);

2.5. 사용 ) (compareToIgnoreCase를

compareToIgnoreCase ()는 이 경우에 무시 제외한 이전의 방법과 유사하다 :

String author = "Author"; String book = "book"; String duplicateBook = "BOOK"; assertThat(author.compareToIgnoreCase(book)) .isEqualTo(-1); assertThat(book.compareToIgnoreCase(author)) .isEqualTo(1); assertThat(duplicateBook.compareToIgnoreCase(book)) .isEqualTo(0);

3. 객체 클래스 와 문자열 비교

Objects 는 정적 equals () 메소드 를 포함하는 유틸리티 클래스로 ,이 시나리오에서 두 개의 문자열 을 비교하는 데 유용합니다 .

이 메서드는 두 문자열 이 동일한 경우 해당 주소 즉“ ==”를 사용하여 먼저 비교하여 true를 반환 합니다 . 따라서 두 인수가 모두 null 이면 true를 반환 하고 정확히 하나의 인수가 null이면 false를 반환합니다.

그렇지 않으면 전달 된 인수의 유형 클래스의 equals () 메소드를 호출합니다. 경우에는 String의 클래스 equals () 메소드입니다. 이 메서드는 내부적으로 String 클래스의 equals () 메서드를 호출하므로 대소 문자를 구분합니다 .

이것을 테스트 해 봅시다 :

String string1 = "using objects equals"; String string2 = "using objects equals"; String string3 = new String("using objects equals"); assertThat(Objects.equals(string1, string2)).isTrue(); assertThat(Objects.equals(string1, string3)).isTrue(); assertThat(Objects.equals(null, null)).isTrue(); assertThat(Objects.equals(null, string1)).isFalse();

4. Apache Commons문자열 비교

Apache Commons 라이브러리에는 문자열 관련 작업을 위한 StringUtils 라는 유틸리티 클래스가 포함되어 있습니다 . 이것은 또한 문자열 비교를 위한 매우 유용한 방법을 가지고 있습니다 .

4.1. 사용 등호를 ()() equalsIgnoreCase

StringUtils 클래스 의 equals () 메서드 는 null 값도 처리 하는 String 클래스 메서드 equals () 의 향상된 버전입니다 .

assertThat(StringUtils.equals(null, null)) .isTrue(); assertThat(StringUtils.equals(null, "equals method")) .isFalse(); assertThat(StringUtils.equals("equals method", "equals method")) .isTrue(); assertThat(StringUtils.equals("equals method", "EQUALS METHOD")) .isFalse();

StringUtilsequalsIgnoreCase () 메소드 는 부울 값을 리턴 합니다. 이것은 문자열의 대소 문자를 무시한다는 점을 제외하면 equals ()와 유사하게 작동 합니다 .

assertThat(StringUtils.equalsIgnoreCase("equals method", "equals method")) .isTrue(); assertThat(StringUtils.equalsIgnoreCase("equals method", "EQUALS METHOD")) .isTrue();

4.2. 사용 equalsAny ()() equalsAnyIgnoreCase를

The equalsAny() method's first argument is a String and the second is a multi-args type CharSequence. The method returns true if any of the other given Strings match against the first String case sensitively.

Otherwise, false is returned:

assertThat(StringUtils.equalsAny(null, null, null)) .isTrue(); assertThat(StringUtils.equalsAny("equals any", "equals any", "any")) .isTrue(); assertThat(StringUtils.equalsAny("equals any", null, "equals any")) .isTrue(); assertThat(StringUtils.equalsAny(null, "equals", "any")) .isFalse(); assertThat(StringUtils.equalsAny("equals any", "EQUALS ANY", "ANY")) .isFalse();

The equalsAnyIgnoreCase() method works similarly to the equalsAny() method, but also ignores casing:

assertThat(StringUtils.equalsAnyIgnoreCase("ignore case", "IGNORE CASE", "any")).isTrue();

4.3. Using compare() and compareIgnoreCase()

The compare() method in StringUtils class is a null-safe version of the compareTo() method of String class and handles null values by considering a null value less than a non-null value. Two null values are considered equal.

Furthermore, this method can be used to sort a list of Strings with null entries:

assertThat(StringUtils.compare(null, null)) .isEqualTo(0); assertThat(StringUtils.compare(null, "abc")) .isEqualTo(-1); assertThat(StringUtils.compare("abc", "bbc")) .isEqualTo(-1); assertThat(StringUtils.compare("bbc", "abc")) .isEqualTo(1);

The compareIgnoreCase() method behaves similarly, except it ignores casing:

assertThat(StringUtils.compareIgnoreCase("Abc", "bbc")) .isEqualTo(-1); assertThat(StringUtils.compareIgnoreCase("bbc", "ABC")) .isEqualTo(1); assertThat(StringUtils.compareIgnoreCase("abc", "ABC")) .isEqualTo(0);

두 메서드는 nullIsLess 옵션 과 함께 사용할 수도 있습니다 . 이것은 null 값을 더 적게 고려할지 여부를 결정 하는 세 번째 부울 인수입니다 .

값은 다른 것보다 낮은 문자열 경우 nullIsLess이 경우는 true와 높은 nullIsLess은 false입니다.

시도해 보겠습니다.

assertThat(StringUtils.compare(null, "abc", true)) .isEqualTo(-1); assertThat(StringUtils.compare(null, "abc", false)) .isEqualTo(1);

compareIgnoreCase () 세 번째 방법으로 부울 인수 작업 마찬가지로 대소 제외.

5. 결론

이 빠른 자습서에서는 문자열 을 비교하는 다양한 방법에 대해 설명했습니다 .

그리고 항상 그렇듯이 예제의 소스 코드는 GitHub에서 찾을 수 있습니다.