Searching, Sorting, and Text Boundary Detection: Collation Issues : Collator « I18N « Java






Searching, Sorting, and Text Boundary Detection: Collation Issues

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

1.Collator.getInstance(new Locale("sv", ""))
2.Comparing Half-Width and full-width A
3.Collator.NO_DECOMPOSITION
4.Collator.CANONICAL_DECOMPOSITION
5.Collator.FULL_DECOMPOSITION
6.Sort Collate
7.I18N SortI18N Sort
8.Compare accentuated letters
9.Check Equality for two strings with Collator
10.Sort strings using Collator class
11.I18N : TextI18N : Text