자바의 문자열 비교
"두 문자열을 사 전적으로 비교"란 무엇을 의미합니까?
@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 앞에옵니다.
- s 는 t 의 접두사 또는
- 경우 C 와 D는 최초의 문자가 각각있는 S 및 t가 되는 이야 와 t는 다음 다를 c를 선행는 거라고 문자 순서.
참고 : 알파벳 문자의 경우 문자 순서는 알파벳 순서와 일치합니다. 숫자는 문자 앞에오고 대문자는 소문자 앞에옵니다.
예:
- 집이 집보다 우선하다
- 세대가 집에 선행
- 작곡가 컴퓨터보다 앞서다
- H2O가 HOTEL에 선행
Java 사전 순서 :
- 숫자-이전-
- 대문자 -before-
- 소문자
이상하게 보이지만 사실
입니다. 기본 동작을 변경할 수 있도록 비교기 체인을 작성해야했습니다.
순서를 확인하기 위해 더 나은 입력 문자열 예제와 함께 다음 스 니펫을 사용해보십시오 (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"
Input two strings string 1 and string 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])
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
'Development Tip' 카테고리의 다른 글
클래스의 모든 메서드가 먼저 다른 메서드를 호출하는지 확인하는 방법은 무엇입니까? (0) | 2020.10.20 |
---|---|
마지막으로 CSS 변경 (0) | 2020.10.20 |
Git 로그에 오늘의 모든 커밋을 표시하는 방법은 무엇입니까? (0) | 2020.10.20 |
s3cmd를 사용하여 한 S3 버킷에서 다른 버킷으로 모든 파일을 복사 할 수 있습니까? (0) | 2020.10.20 |
UIImage를 축소하고 흐릿하게 만드는 대신 동시에 파삭 파삭하고 선명하게 만드는 방법은 무엇입니까? (0) | 2020.10.20 |