public class StringTest {
public static void main(String[] args) {
String w1 = "cat";
String w2 = "hat";
int comparison = w1.compareTo(w2);
if (comparison < 0) {
System.out.printf("%s < %s\n", w1, w2);
} else {
System.out.printf("%s < %s\n", w2, w1);
}
}
}
cat < hat
가 된다. 이렇게 되는 것이 당연한
결과이긴 하나 만약 사전을 이용할 때와 같은 비교를 수행하기에는 부적합한 결과를 낼 수 있다. 즉, hat 대신 Hat을
집어넣었을 경우, 위 프로그램의 실행 결과는 반대가 되는데, 대문자가 아스키 코드상으로 앞서기 때문이다. 또한 동일성 문제도
있을 수 있는데 예를 들어 한 불어식 이름이 서로 다른 표현방법을 거칠 경우 두 문자열을 서로 다른 것으로 인식할 가능성이 생길
수 있다.
동일성 문제를 확인할 수 있는 코드
public class StringTest {
public static void main(String[] args) {
String name1 = "Michele";
String name2 = "Miche\u0300le"; //U+0300 is the COMBINING GRAVE ACCENT
if (name1.equals(name2)) {
System.out.println("The strings are equal.");
} else {
System.out.println("The strings are unequal.");
}
}
}
위 프로그램의 실행 결과는 아래와 같다.
이번에는 위 프로그램들의 문제점을 해결하기 위한 방법으로 Collator 클래스를 사용하는 코드는 아래와 같다.
import java.text.Collator;
import java.util.Locale;
public class StringTest {
public static void main(String[] args) {
Collator collator = Collator.getInstance(new Locale("en", "US"));
int comparison = collator.compare("cat", "Hat");
if (comparison < 0) {
System.out.printf("%s < %s\n", "cat", "Hat");
} else {
System.out.printf("%s < %s\n", "Hat", "cat");
}
}
}
위 코드의 실행결과는 아래와 같다.
이는 Collator 클래스가 사전에서 cat이 Hat보다 먼저 나오는 사실을 이해하기 때문이라고 한다. 이번에는 위에 나왔던 동일성 문제를 해결하는 Collator 클래스 사용예제를 보도록 하자.
import java.text.Collator;
import java.util.Locale;
public class StringTest {
public static void main(String[] args) {
Collator collator = Collator.getInstance(Locale.US);
String name1 = "Michele";
String name2 = "Miche\u0300le";
int comparison = collator.compare(name1, name2);
if (comparison == 0) {
System.out.println("The strings are equal.");
} else {
System.out.println("The string are unequal.");
}
}
}
위 코드의 실행결과는 아래와 같이 우리가 기대하던 바이다.
출처 : http://decoder.tistory.com/24