목차
728x90
Java에서 문자열을 비교하는 방법에는 동일한지 확인할 수 있는 equals(), 사전순 정렬 순위까지 파악할 수 있는 compareTo()가 있다.
compareTo()의 결과로 음수, 0, 양수가 나오는데, 어떻게 이런 결과가 나오는지 메소드 구현 방법을 확인해보았다.
String.class
private final class String implements java.io.Serializable, Comparable<String>, CharSequence {
// 생략
private final char value[];
// 생략
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
}
- str1.compareTo(str2)에서 str1, str2를 각각 char 배열로 만들어 처리
1) str1, str2가 포함 관계가 아닌 경우
- str1의 char 배열, str2의 char 배열을 맨 앞 index부터 차례대로 비교
- 동일하지 않은 경우 str1의 char - str2의 char (ASCII 코드 값의 차)를 반환
따라서, str1이 사전 순 앞인 경우 음수, 뒤인 경우 양수를 반환
2) str1, str2가 포함 관계인 경우 (str1, str2 중 하나가 빈 값인 경우를 포함)
- str1, str2의 길이 차이를 반환
따라서, str1이 사전 순 앞인 경우 음수, 뒤인 경우 양수, 동일한 경우 0을 반환
→ str1.compareTo(str2)에서
- str1이 사전순 앞인 경우 음수, 뒤인 경우 양수, 동일한 경우 0을 반환한다.
- 단, str1, str2이 포함 관계이면 길이 차이를, 포함관계가 아닌 경우 처음으로 일치하지 않는 문자의 ASCII 코드 값 차이를 반환한다.
728x90
'Language > Java' 카테고리의 다른 글
[Java] BigInteger 사용하기 (0) | 2024.08.22 |
---|---|
[Java] Java 코딩테스트 기본 메소드 (0) | 2024.03.28 |
[Java] JVM의 구조 (0) | 2024.02.04 |
[Java] 빌드 도구 Gradle (0) | 2024.01.22 |
java 오류 메시지 모음 (0) | 2023.02.10 |
728x90
Java에서 문자열을 비교하는 방법에는 동일한지 확인할 수 있는 equals(), 사전순 정렬 순위까지 파악할 수 있는 compareTo()가 있다.
compareTo()의 결과로 음수, 0, 양수가 나오는데, 어떻게 이런 결과가 나오는지 메소드 구현 방법을 확인해보았다.
String.class
private final class String implements java.io.Serializable, Comparable<String>, CharSequence {
// 생략
private final char value[];
// 생략
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
}
- str1.compareTo(str2)에서 str1, str2를 각각 char 배열로 만들어 처리
1) str1, str2가 포함 관계가 아닌 경우
- str1의 char 배열, str2의 char 배열을 맨 앞 index부터 차례대로 비교
- 동일하지 않은 경우 str1의 char - str2의 char (ASCII 코드 값의 차)를 반환
따라서, str1이 사전 순 앞인 경우 음수, 뒤인 경우 양수를 반환
2) str1, str2가 포함 관계인 경우 (str1, str2 중 하나가 빈 값인 경우를 포함)
- str1, str2의 길이 차이를 반환
따라서, str1이 사전 순 앞인 경우 음수, 뒤인 경우 양수, 동일한 경우 0을 반환
→ str1.compareTo(str2)에서
- str1이 사전순 앞인 경우 음수, 뒤인 경우 양수, 동일한 경우 0을 반환한다.
- 단, str1, str2이 포함 관계이면 길이 차이를, 포함관계가 아닌 경우 처음으로 일치하지 않는 문자의 ASCII 코드 값 차이를 반환한다.
728x90
'Language > Java' 카테고리의 다른 글
[Java] BigInteger 사용하기 (0) | 2024.08.22 |
---|---|
[Java] Java 코딩테스트 기본 메소드 (0) | 2024.03.28 |
[Java] JVM의 구조 (0) | 2024.02.04 |
[Java] 빌드 도구 Gradle (0) | 2024.01.22 |
java 오류 메시지 모음 (0) | 2023.02.10 |