Java by API/java.text/RuleBasedCollator

Материал из Java эксперт
Перейти к: навигация, поиск

new RuleBasedCollator(String rules)

   <source lang="java">

import java.text.Collator; import java.text.ParseException; import java.text.RuleBasedCollator; import java.util.Collections; import java.util.Locale; import java.util.Vector; public class SpanishSort {

 public SpanishSort() {
   Vector v = new Vector();
   v.add("musa");
   v.add("chic");
   v.add("llama");
   v.add("dela");
   v.add("chocolate");
   v.add("banana");
   v.add("crispa");
   v.add("luzca");
   Collator esCollator = Collator.getInstance(new Locale("es", "ES"));
   String spanishRules = ((RuleBasedCollator) esCollator).getRules();
   try {
     String traditionalRules = "& C < ch, cH, Ch, CH " + "& L < ll, lL, Ll, LL";
     RuleBasedCollator collate = new RuleBasedCollator(spanishRules + traditionalRules);
     Collections.sort(v, collate);
   } catch (ParseException e) {
     System.out.println("Error parsing rules " + e.toString());
   }
   StringBuffer result = new StringBuffer();
   for (int i = 0; i < v.size(); i++) {
     result.append(v.elementAt(i));
     result.append("\n");
   }
   System.out.println(result);
 }
 public static void main(String[] args) {
   new SpanishSort();
 }

}


 </source>
   
  
 
  



RuleBasedCollator: getCollationElementIterator(String source)

   <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>
   
  
 
  



RuleBasedCollator: getCollationKey(String source)

   <source lang="java">
 

import java.io.BufferedReader; import java.io.FileReader; import java.text.CollationKey; import java.text.Collator; import java.text.RuleBasedCollator; import java.util.Locale; import java.util.Vector; class CollateApp {

 public static void main(String args[]) {
   if (args.length != 1) {
     System.out.println("Usage: java CollateApp file");
     System.exit(0);
   }
   Locale defaultLocale = Locale.getDefault();
   RuleBasedCollator collator = (RuleBasedCollator) Collator.getInstance(defaultLocale);
   Vector<Object> keyVector = new Vector<Object>();
   try {
     BufferedReader in = new BufferedReader(new FileReader(args[0]));
     String line;
     while ((line = in.readLine()) != null)
       keyVector.addElement(collator.getCollationKey(line));
     in.close();
   } catch (Exception ex) {
     System.out.println(ex);
     System.exit(0);
   }
   CollationKey keys[] = new CollationKey[keyVector.size()];
   for (int i = 0; i < keys.length; ++i)
     keys[i] = (CollationKey) keyVector.elementAt(i);
 }

}


 </source>