Java by API/java.text/Collator
Содержание
- 1 Collator.CANONICAL_DECOMPOSITION
- 2 Collator.FULL_DECOMPOSITION
- 3 Collator: getCollationKey(String source)
- 4 Collator.getInstance()
- 5 Collator: getInstance(Locale desiredLocale)
- 6 Collator.IDENTICAL
- 7 Collator.NO_DECOMPOSITION
- 8 Collator.SECONDARY
- 9 Collator: setDecomposition(int decompositionMode)
- 10 Collator: setStrength(int newStrength)
Collator.CANONICAL_DECOMPOSITION
<source lang="java">
/*
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(); }
}
</source>
Collator.FULL_DECOMPOSITION
<source lang="java">
/*
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(); }
}
</source>
Collator: getCollationKey(String source)
<source lang="java">
import java.text.CollationKey; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; public class MainClass {
public static void main(String[] args) { // Build a vector of words to be sorted ArrayList list = new ArrayList(); list.add("m"); list.add("c2"); list.add("e"); list.add("c1"); Collator collate = Collator.getInstance(); CollationKey[] keys = new CollationKey[list.size()]; for (int k = 0; k < list.size(); k ++) keys[k] = collate.getCollationKey((String)list.get(k)); Arrays.sort(keys); for (int l= 0;l < keys.length; l++) { System.out.println(keys[l].getSourceString()); } }
}
</source>
Collator.getInstance()
<source lang="java">
import java.text.CollationKey; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; public class MainClass {
public static void main(String[] args) { // Build a vector of words to be sorted ArrayList list = new ArrayList(); list.add("m"); list.add("c2"); list.add("e"); list.add("c1"); Collator collate = Collator.getInstance(); CollationKey[] keys = new CollationKey[list.size()]; for (int k = 0; k < list.size(); k ++) keys[k] = collate.getCollationKey((String)list.get(k)); Arrays.sort(keys); for (int l= 0;l < keys.length; l++) { System.out.println(keys[l].getSourceString()); } }
}
</source>
Collator: getInstance(Locale desiredLocale)
<source lang="java">
import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.Locale; import javax.swing.JLabel; public class MainClass {
public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("\u00e4pple"); list.add("banan"); list.add("p\u00e4ron"); list.add("orange"); // Obtain a Swedish collator Collator collate = Collator.getInstance(new Locale("sv", "")); Collections.sort(list, collate); for (int i= 0;i < list.size(); i++) { System.out.println(list.get(i)); } }
}
</source>
Collator.IDENTICAL
<source lang="java">
/*
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(); }
}
</source>
Collator.NO_DECOMPOSITION
<source lang="java">
/*
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(); }
}
</source>
Collator.SECONDARY
<source lang="java">
import java.text.CollationElementIterator; import java.text.Collator; import java.text.RuleBasedCollator; public class Search {
public static int indexOf(String source, String pattern) { RuleBasedCollator rbc = (RuleBasedCollator) Collator.getInstance(); rbc.setStrength(Collator.SECONDARY); CollationElementIterator textCEI; CollationElementIterator patCEI; textCEI = rbc.getCollationElementIterator(source); patCEI = rbc.getCollationElementIterator(pattern); // e1 will contain the collation element for the source // e2 will contain the collation element for the pattern int e1, e2; int startMatch = -1; // initialize e2 with the first collation element in the pattern e2 = patCEI.next(); while ((e1 = textCEI.next()) != CollationElementIterator.NULLORDER) { if (e1 == e2) { // if the elements match if (startMatch == -1) startMatch = textCEI.getOffset(); e2 = patCEI.next(); // increment to the next element if (e2 == CollationElementIterator.NULLORDER) break; } else { // elements do not match if (startMatch != -1) { patCEI.reset(); e2 = patCEI.next(); startMatch = -1; } } } return startMatch; } public static void main(String[] args) { String text = "Wie hei\u00DFen Sie?"; // Wie heißen Sie? String pattern = "heissen"; int index = indexOf(text, pattern); if (index != -1) System.out.println("Found a match at: " + index); else System.out.println("No match found!"); }
}
</source>
Collator: setDecomposition(int decompositionMode)
<source lang="java">
/*
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(); }
}
</source>
Collator: setStrength(int newStrength)
<source lang="java">
/*
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(); }
}
</source>