Searching, Sorting, and Text Boundary Detection: Collation Issues
/* Java Internationalization By Andy Deitsch, David Czarnecki ISBN: 0-596-00019-7 O'Reilly */ import java.text.*; public class JavaSearch { public static int indexOf(String source, String pattern) { // Obtain a collator 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 heiBen 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!"); } }