Development Tip

자바의 문자열 비교

yourdevel 2020. 10. 20. 08:16
반응형

자바의 문자열 비교


"두 문자열을 사 전적으로 비교"란 무엇을 의미합니까?


@Bozho 및 @aioobe의 답변을 기반으로 한 사전 식 비교는 사전에서 찾을 수있는 순서와 유사합니다.

Java String 클래스는 .compareTo ()문자열을 사 전적으로 비교하기위한 메소드를 제공합니다 . 이렇게 사용됩니다 "apple".compareTo ("banana").

이 메서드의 반환은 int다음과 같이 해석 될 수 있습니다.

  • <0을 반환하면 메서드를 호출하는 문자열이 사전 순으로 먼저 처리됩니다 (사전에서 먼저 표시됨).
  • == 0을 반환하면 두 문자열이 사 전적으로 동일합니다.
  • > 0을 반환하면 compareTo메서드에 전달 된 매개 변수 가 사전 순으로 먼저 처리됩니다.

보다 구체적으로,이 방법은 ASCII 값에서 0이 아닌 첫 번째 차이를 제공합니다.

따라서 (20) "computer".compareTo ("comparison")값을 반환합니다 (int) 'u' - (int) 'a'. 이는 긍정적 인 결과이기 때문에 매개 변수 ( "comparison")가 사전 순으로 먼저 표시됩니다.

변형도있다 .compareToIgnoreCase ()반환 0에 대한 "a".compareToIgnoreCase ("A");예를 들어이.


"비교"라는 표현은 약간 오해의 소지가 있습니다. 엄격한 동등성을 비교하는 것이 아니라 사전 (사전)에서 어떤 문자열이 먼저 오는지 비교합니다.

이것은 문자열 모음을 정렬 할 수 있도록하는 기능입니다.

이것은 활성 로케일에 따라 크게 달라집니다. 예를 들어, 여기 덴마크 에서는 "aa"로 철자가 쓰이는 문자 "å" 가 있으며 두 개의 단일 a와 매우 구별됩니다 (편집 : "å" 로 발음되는 경우 !). 따라서 덴마크어 정렬 규칙은 두 개의 연속 a를 "å"와 동일하게 취급합니다. 즉, z 다음에옵니다. 이것은 또한 덴마크어 사전이 영어 또는 스웨덴어 사전과 다르게 정렬됨을 의미합니다.


String.compareTo(..)방법은 사전 식 비교를 수행합니다. 사 전적으로 == alphebetically.


서로 같은 위치에있는 글자를 순차적으로 비교 .. 사전에서 단어를 정렬하는 방법과 더 비슷


어휘집에서 어떤 문자열이 먼저 나오는지 확인하면 문자열의 사전 비교를 수행 한 것입니다!

일부 링크 :

후자의 링크에서 도난 :

문자열 s는 다음과 같은 경우 사전 식 순서로 문자열 t 앞에옵니다.

  • st 의 접두사 또는
  • 경우 CD는 최초의 문자가 각각있는 St가 되는 이야t는 다음 다를 c를 선행는 거라고 문자 순서.

참고 : 알파벳 문자의 경우 문자 순서는 알파벳 순서와 일치합니다. 숫자는 문자 앞에오고 대문자는 소문자 앞에옵니다.

예:

  • 집이 집보다 우선하다
  • 세대가 집에 선행
  • 작곡가 컴퓨터보다 앞서다
  • H2O가 HOTEL에 선행

Java 사전 순서 :

  1. 숫자-이전-
  2. 대문자 -before-
  3. 소문자

이상하게 보이지만 사실
입니다. 기본 동작을 변경할 수 있도록 비교기 체인을 작성해야했습니다.
순서를 확인하기 위해 더 나은 입력 문자열 예제와 함께 다음 스 니펫을 사용해보십시오 (JSE 8이 필요합니다).

import java.util.ArrayList;

public class HelloLambda {

public static void main(String[] args) {
    ArrayList<String> names = new ArrayList<>();
    names.add("Kambiz");
    names.add("kambiz");
    names.add("k1ambiz");
    names.add("1Bmbiza");
    names.add("Samantha");
    names.add("Jakey");
    names.add("Lesley");
    names.add("Hayley");
    names.add("Benjamin");
    names.add("Anthony");

    names.stream().
        filter(e -> e.contains("a")).
        sorted().
        forEach(System.out::println);
}
}

결과

1Bmbiza
Benjamin
Hayley
Jakey
Kambiz
Samantha
k1ambiz
kambiz

Please note this is answer is Locale specific.
Please note that I am filtering for a name containing the lowercase letter a.


Below Algo "compare two strings lexicographically"

  1. Input two strings string 1 and string 2.

  2. for (int i = 0; i < str1.length() && i < str2.length(); i ++)

    (Loop through each character of both strings comparing them until one of the string terminates):

    a. If unicode value of both the characters is same then continue;

    b. If unicode value of character of string 1 and unicode value of string 2 is different then return (str1[i]-str2[i])

  3. if length of string 1 is less than string2

    return str2[str1.length()]

    else

    return str1[str2.length()]

    // This method compares two strings lexicographically

    public static int compareCustom(String s1, String s2) {
        for (int i = 0; i < s1.length() && i< s2.length(); i++) {
            if(s1.charAt(i) == s2.charAt(i)){
                //System.out.println("Equal");
                continue;
            }
            else{
                return s1.charAt(i) - s2.charAt(i);
            }   
        }
        if(s1.length()<s2.length()){
            return s2.length() - s1.length();
        }
        else if(s1.length()>s2.length()){
            return s1.length()-s2.length();
        }
        else{
            return 0;
        }
    }
    

if two String are equal it will return 0 otherwise return Negative or positive value

Source : - Source

참고URL : https://stackoverflow.com/questions/4064633/string-comparison-in-java

반응형