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!");
}
}
Related examples in the same category