/*
CANONICAL DECOMPOSITION: The strings are equal.
FULL DECOMPOSITION: The strings are equal.
Comparing a + umlaut and precomposed a-umlaut
NO DECOMPOSITION: The strings are NOT equal.
CANONICAL DECOMPOSITION: The strings are equal.
FULL DECOMPOSITION: The strings are equal.
*/
import java.text.Collator;
import java.util.Locale;
public class Decomposition {
public void compare(Collator c, String a, String b) {
switch (c.getDecomposition()) {
case Collator.NO_DECOMPOSITION:
System.out.print(" NO DECOMPOSITION: ");
break;
case Collator.CANONICAL_DECOMPOSITION:
System.out.print(" CANONICAL DECOMPOSITION: ");
break;
case Collator.FULL_DECOMPOSITION:
System.out.print(" FULL DECOMPOSITION: ");
break;
default:
System.out.print(" UNKNOWN DECOMPOSITION: ");
}
if (c.equals(a, b))
System.out.println("The strings are equal.");
else
System.out.println("The strings are NOT equal.");
}
public Decomposition() {
String pairs[][] = new String[3][3];
pairs[0][0] = "Half-Width and full-width A";
pairs[0][1] = "A";
pairs[0][2] = "\uFF21"; // full-width A
pairs[1][0] = "A with Ring and Angstrom Sign";
pairs[1][1] = "\u00c5"; // A with ring
pairs[1][2] = "\u212b"; // Angstrom
pairs[2][0] = "a + umlaut and precomposed a-umlaut";
pairs[2][1] = "a\u0308";
pairs[2][2] = "\u00e4";
for (int i = 0; i < 3; i++) {
Collator collate = Collator.getInstance(Locale.US);
collate.setStrength(Collator.IDENTICAL);
System.out.println("Comparing " + pairs[i][0]);
collate.setDecomposition(Collator.NO_DECOMPOSITION);
compare(collate, pairs[i][1], pairs[i][2]);
collate.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
compare(collate, pairs[i][1], pairs[i][2]);
collate.setDecomposition(Collator.FULL_DECOMPOSITION);
compare(collate, pairs[i][1], pairs[i][2]);
System.out.println("");
}
}
public static void main(String[] s) {
new Decomposition();
}
}
|