<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FI18N%2FCollator</id>
		<title>Java Tutorial/I18N/Collator - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FI18N%2FCollator"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/I18N/Collator&amp;action=history"/>
		<updated>2026-04-22T01:49:02Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/I18N/Collator&amp;diff=4536&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/I18N/Collator&amp;diff=4536&amp;oldid=prev"/>
				<updated>2010-06-01T05:02:56Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 05:02, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/I18N/Collator&amp;diff=4535&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/I18N/Collator&amp;diff=4535&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Check Equality for two strings with Collator ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.Collator;&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    String s1 = &amp;quot;&amp;amp;eacute;&amp;quot;;&lt;br /&gt;
    String s2 = &amp;quot;�&amp;quot;;&lt;br /&gt;
    Collator frCollator = Collator.getInstance(Locale.FRANCE);&lt;br /&gt;
    frCollator.setStrength(Collator.SECONDARY);&lt;br /&gt;
    if (frCollator.rupare(s1, s2) == 0) {&lt;br /&gt;
      System.out.println(&amp;quot;s1 = s2&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//s1 = s2&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  CollationKey and Collator.getInstance ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *&lt;br /&gt;
 *   - Redistributions of source code must retain the above copyright&lt;br /&gt;
 *     notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 *   - Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *     notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *     documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 *   - Neither the name of Sun Microsystems nor the names of its&lt;br /&gt;
 *     contributors may be used to endorse or promote products derived&lt;br /&gt;
 *     from this software without specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS&lt;br /&gt;
 * IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR&lt;br /&gt;
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
import java.text.CollationKey;&lt;br /&gt;
import java.text.Collator;&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
public class KeysDemo {&lt;br /&gt;
  public static void sortArray(CollationKey[] keys) {&lt;br /&gt;
    CollationKey tmp;&lt;br /&gt;
    for (int i = 0; i &amp;lt; keys.length; i++) {&lt;br /&gt;
      for (int j = i + 1; j &amp;lt; keys.length; j++) {&lt;br /&gt;
        // Compare the keys&lt;br /&gt;
        if (keys[i].rupareTo(keys[j]) &amp;gt; 0) {&lt;br /&gt;
          // Swap keys[i] and keys[j]&lt;br /&gt;
          tmp = keys[i];&lt;br /&gt;
          keys[i] = keys[j];&lt;br /&gt;
          keys[j] = tmp;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  static void displayWords(CollationKey[] keys) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; keys.length; i++) {&lt;br /&gt;
      System.out.println(keys[i].getSourceString());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  static public void main(String[] args) {&lt;br /&gt;
    Collator enUSCollator = Collator.getInstance(new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;));&lt;br /&gt;
    String[] words = { &amp;quot;peach&amp;quot;, &amp;quot;apricot&amp;quot;, &amp;quot;grape&amp;quot;, &amp;quot;lemon&amp;quot; };&lt;br /&gt;
    CollationKey[] keys = new CollationKey[words.length];&lt;br /&gt;
    for (int k = 0; k &amp;lt; keys.length; k++) {&lt;br /&gt;
      keys[k] = enUSCollator.getCollationKey(words[k]);&lt;br /&gt;
    }&lt;br /&gt;
    sortArray(keys);&lt;br /&gt;
    displayWords(keys);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Collator based compare ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *&lt;br /&gt;
 *   - Redistributions of source code must retain the above copyright&lt;br /&gt;
 *     notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 *   - Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *     notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *     documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 *   - Neither the name of Sun Microsystems nor the names of its&lt;br /&gt;
 *     contributors may be used to endorse or promote products derived&lt;br /&gt;
 *     from this software without specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS&lt;br /&gt;
 * IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR&lt;br /&gt;
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
import java.text.Collator;&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
public class CollatorDemo {&lt;br /&gt;
  public static void sortStrings(Collator collator, String[] words) {&lt;br /&gt;
    String tmp;&lt;br /&gt;
    for (int i = 0; i &amp;lt; words.length; i++) {&lt;br /&gt;
      for (int j = i + 1; j &amp;lt; words.length; j++) {&lt;br /&gt;
        // Compare elements of the array two at a time.&lt;br /&gt;
        if (collator.rupare(words[i], words[j]) &amp;gt; 0) {&lt;br /&gt;
          // Swap words[i] and words[j]&lt;br /&gt;
          tmp = words[i];&lt;br /&gt;
          words[i] = words[j];&lt;br /&gt;
          words[j] = tmp;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void printStrings(String[] words) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; words.length; i++) {&lt;br /&gt;
      System.out.println(words[i]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void testCompare() {&lt;br /&gt;
    Collator myCollator = Collator.getInstance(new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;));&lt;br /&gt;
    System.out.println(myCollator.rupare(&amp;quot;abc&amp;quot;, &amp;quot;def&amp;quot;));&lt;br /&gt;
    System.out.println(myCollator.rupare(&amp;quot;rtf&amp;quot;, &amp;quot;rtf&amp;quot;));&lt;br /&gt;
    System.out.println(myCollator.rupare(&amp;quot;xyz&amp;quot;, &amp;quot;abc&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  static public void main(String[] args) {&lt;br /&gt;
    testCompare();&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    Collator fr_FRCollator = Collator.getInstance(new Locale(&amp;quot;fr&amp;quot;, &amp;quot;FR&amp;quot;));&lt;br /&gt;
    Collator en_USCollator = Collator.getInstance(new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;));&lt;br /&gt;
    String eWithCircumflex = new String(&amp;quot;\u00EA&amp;quot;);&lt;br /&gt;
    String eWithAcute = new String(&amp;quot;\u00E9&amp;quot;);&lt;br /&gt;
    String peachfr = &amp;quot;p&amp;quot; + eWithAcute + &amp;quot;ch&amp;quot; + eWithAcute;&lt;br /&gt;
    String sinfr = &amp;quot;p&amp;quot; + eWithCircumflex + &amp;quot;che&amp;quot;;&lt;br /&gt;
    String[] words = { peachfr, sinfr, &amp;quot;peach&amp;quot;, &amp;quot;sin&amp;quot; };&lt;br /&gt;
    sortStrings(fr_FRCollator, words);&lt;br /&gt;
    System.out.println(&amp;quot;Locale: fr_FR&amp;quot;);&lt;br /&gt;
    printStrings(words);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    sortStrings(en_USCollator, words);&lt;br /&gt;
    System.out.println(&amp;quot;Locale: en_US&amp;quot;);&lt;br /&gt;
    printStrings(words);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Compare accentuated letters ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.Collator;&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    String s1 = &amp;quot;&amp;amp;eacute;&amp;quot;;&lt;br /&gt;
    String s2 = &amp;quot;f&amp;quot;;&lt;br /&gt;
    Collator frCollator = Collator.getInstance(Locale.FRANCE);&lt;br /&gt;
    frCollator.setStrength(Collator.CANONICAL_DECOMPOSITION);&lt;br /&gt;
    if (frCollator.rupare(s1, s2) &amp;lt; 0) {&lt;br /&gt;
        System.out.println(&amp;quot;s1 &amp;lt; s2&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//s1 &amp;lt; s2&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Comparing Strings in a Locale-Independent Way ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.Collator;&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    Collator collator = Collator.getInstance(Locale.CANADA);&lt;br /&gt;
    String aString1 = &amp;quot;&amp;quot;;&lt;br /&gt;
    String aString2 = &amp;quot;&amp;quot;;&lt;br /&gt;
    int compare = collator.rupare(aString1, aString2);&lt;br /&gt;
    if (compare &amp;lt; 0) {&lt;br /&gt;
      // aString1 &amp;lt; aString2&lt;br /&gt;
    } else if (compare &amp;gt; 1) {&lt;br /&gt;
      // aString1 &amp;gt; aString2&lt;br /&gt;
    } else {&lt;br /&gt;
      // aString1 = aString2&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  International friendly string comparison with case-order ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Licensed to the Apache Software Foundation (ASF) under one&lt;br /&gt;
 * or more contributor license agreements. See the NOTICE file&lt;br /&gt;
 * distributed with this work for additional information&lt;br /&gt;
 * regarding copyright ownership. The ASF licenses this file&lt;br /&gt;
 * to you under the Apache License, Version 2.0 (the  &amp;quot;License&amp;quot;);&lt;br /&gt;
 * you may not use this file except in compliance with the License.&lt;br /&gt;
 * You may obtain a copy of the License at&lt;br /&gt;
 *&lt;br /&gt;
 *     http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 *&lt;br /&gt;
 * Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
 * See the License for the specific language governing permissions and&lt;br /&gt;
 * limitations under the License.&lt;br /&gt;
 */&lt;br /&gt;
/*&lt;br /&gt;
 * $Id: StringComparable.java 468655 2006-10-28 07:12:06Z minchau $&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
import java.text.Collator;&lt;br /&gt;
import java.text.RuleBasedCollator;&lt;br /&gt;
import java.text.CollationElementIterator;&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
import java.text.CollationKey;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
* International friendly string comparison with case-order&lt;br /&gt;
 * @author Igor Hersht, igorh@ca.ibm.ru&lt;br /&gt;
*/&lt;br /&gt;
public class StringComparable implements Comparable  {&lt;br /&gt;
    &lt;br /&gt;
     public final static int UNKNOWN_CASE = -1;&lt;br /&gt;
     public final static int UPPER_CASE = 1;&lt;br /&gt;
     public final static int LOWER_CASE = 2;&lt;br /&gt;
     &lt;br /&gt;
     private  String m_text;&lt;br /&gt;
     private  Locale m_locale;&lt;br /&gt;
     private RuleBasedCollator m_collator;&lt;br /&gt;
     private String m_caseOrder;&lt;br /&gt;
     private int m_mask = 0xFFFFFFFF; &lt;br /&gt;
     &lt;br /&gt;
    public StringComparable(final String text, final Locale locale, final Collator collator, final String caseOrder){&lt;br /&gt;
         m_text =  text;&lt;br /&gt;
         m_locale = locale;&lt;br /&gt;
         m_collator = (RuleBasedCollator)collator;&lt;br /&gt;
         m_caseOrder = caseOrder;&lt;br /&gt;
         m_mask = getMask(m_collator.getStrength());&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
   public final static Comparable getComparator( final String text, final Locale locale, final Collator collator, final String caseOrder){&lt;br /&gt;
       if((caseOrder == null) ||(caseOrder.length() == 0)){// no case-order specified&lt;br /&gt;
            return  ((RuleBasedCollator)collator).getCollationKey(text);&lt;br /&gt;
       }else{&lt;br /&gt;
            return new StringComparable(text, locale, collator, caseOrder);&lt;br /&gt;
       }       &lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   public final String toString(){return m_text;}&lt;br /&gt;
   &lt;br /&gt;
   public int compareTo(Object o) {&lt;br /&gt;
   final String pattern = ((StringComparable)o).toString();&lt;br /&gt;
   if(m_text.equals(pattern)){//Code-point equals &lt;br /&gt;
      return 0;&lt;br /&gt;
   }&lt;br /&gt;
   final int savedStrength = m_collator.getStrength(); &lt;br /&gt;
   int comp = 0;&lt;br /&gt;
      // Is there difference more significant than case-order?     &lt;br /&gt;
     if(((savedStrength == Collator.PRIMARY) || (savedStrength == Collator.SECONDARY))){  &lt;br /&gt;
         comp = m_collator.rupare(m_text, pattern );     &lt;br /&gt;
     }else{// more than SECONDARY&lt;br /&gt;
         m_collator.setStrength(Collator.SECONDARY);&lt;br /&gt;
         comp = m_collator.rupare(m_text, pattern );&lt;br /&gt;
         m_collator.setStrength(savedStrength);&lt;br /&gt;
     }&lt;br /&gt;
     if(comp != 0){//Difference more significant than case-order &lt;br /&gt;
        return comp ; &lt;br /&gt;
     }      &lt;br /&gt;
        &lt;br /&gt;
      // No difference more significant than case-order.     &lt;br /&gt;
      // Find case difference&lt;br /&gt;
       comp = getCaseDiff(m_text, pattern);&lt;br /&gt;
       if(comp != 0){  &lt;br /&gt;
           return comp;&lt;br /&gt;
       }else{// No case differences. Less significant difference could exist &lt;br /&gt;
            return m_collator.rupare(m_text, pattern );&lt;br /&gt;
       }      &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  private final int getCaseDiff (final String text, final String pattern){&lt;br /&gt;
     final int savedStrength = m_collator.getStrength();&lt;br /&gt;
     final int savedDecomposition = m_collator.getDecomposition();&lt;br /&gt;
     m_collator.setStrength(Collator.TERTIARY);// not to ignore case  &lt;br /&gt;
     m_collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION );// corresponds NDF&lt;br /&gt;
     &lt;br /&gt;
    final int diff[] =getFirstCaseDiff (text, pattern, m_locale);&lt;br /&gt;
    m_collator.setStrength(savedStrength);// restore&lt;br /&gt;
    m_collator.setDecomposition(savedDecomposition); //restore&lt;br /&gt;
    if(diff != null){  &lt;br /&gt;
       if((m_caseOrder).equals(&amp;quot;upper-first&amp;quot;)){&lt;br /&gt;
            if(diff[0] == UPPER_CASE){&lt;br /&gt;
                return -1;&lt;br /&gt;
            }else{&lt;br /&gt;
                return 1;&lt;br /&gt;
            }&lt;br /&gt;
       }else{// lower-first&lt;br /&gt;
            if(diff[0] == LOWER_CASE){&lt;br /&gt;
                return -1;&lt;br /&gt;
            }else{&lt;br /&gt;
                return 1;&lt;br /&gt;
            }&lt;br /&gt;
       }&lt;br /&gt;
   }else{// No case differences&lt;br /&gt;
        return 0;&lt;br /&gt;
   }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  private final int[] getFirstCaseDiff(final String text, final String pattern, final Locale locale){&lt;br /&gt;
        &lt;br /&gt;
        final CollationElementIterator targIter = m_collator.getCollationElementIterator(text);&lt;br /&gt;
        final CollationElementIterator patIter = m_collator.getCollationElementIterator(pattern);  &lt;br /&gt;
        int startTarg = -1;&lt;br /&gt;
        int endTarg = -1;&lt;br /&gt;
        int startPatt = -1;&lt;br /&gt;
        int endPatt = -1;&lt;br /&gt;
        final int done = getElement(CollationElementIterator.NULLORDER);&lt;br /&gt;
        int patternElement = 0, targetElement = 0;&lt;br /&gt;
        boolean getPattern = true, getTarget = true;&lt;br /&gt;
        &lt;br /&gt;
        while (true) { &lt;br /&gt;
            if (getPattern){&lt;br /&gt;
                 startPatt = patIter.getOffset();&lt;br /&gt;
                 patternElement = getElement(patIter.next());&lt;br /&gt;
                 endPatt = patIter.getOffset();&lt;br /&gt;
            }&lt;br /&gt;
            if ((getTarget)){               &lt;br /&gt;
                 startTarg  = targIter.getOffset(); &lt;br /&gt;
                 targetElement   = getElement(targIter.next()); &lt;br /&gt;
                 endTarg  = targIter.getOffset();&lt;br /&gt;
            }&lt;br /&gt;
            getTarget = getPattern = true;                          &lt;br /&gt;
            if ((patternElement == done) ||( targetElement == done)) {&lt;br /&gt;
                return null;                      &lt;br /&gt;
            } else if (targetElement == 0) {&lt;br /&gt;
              getPattern = false;           &lt;br /&gt;
            } else if (patternElement == 0) {&lt;br /&gt;
              getTarget = false;           &lt;br /&gt;
            } else if (targetElement != patternElement) {// mismatch&lt;br /&gt;
                if((startPatt &amp;lt; endPatt) &amp;amp;&amp;amp; (startTarg &amp;lt; endTarg)){&lt;br /&gt;
                    final String  subText = text.substring(startTarg, endTarg);&lt;br /&gt;
                    final String  subPatt = pattern.substring(startPatt, endPatt);&lt;br /&gt;
                    final String  subTextUp = subText.toUpperCase(locale);&lt;br /&gt;
                    final String  subPattUp = subPatt.toUpperCase(locale);&lt;br /&gt;
                    if(m_collator.rupare(subTextUp, subPattUp) != 0){ // not case diffference&lt;br /&gt;
                        continue;&lt;br /&gt;
                    }&lt;br /&gt;
                    &lt;br /&gt;
                    int diff[] = {UNKNOWN_CASE, UNKNOWN_CASE};&lt;br /&gt;
                    if(m_collator.rupare(subText, subTextUp) == 0){&lt;br /&gt;
                        diff[0] = UPPER_CASE;&lt;br /&gt;
                    }else if(m_collator.rupare(subText, subText.toLowerCase(locale)) == 0){&lt;br /&gt;
                       diff[0] = LOWER_CASE; &lt;br /&gt;
                    }&lt;br /&gt;
                    if(m_collator.rupare(subPatt, subPattUp) == 0){&lt;br /&gt;
                        diff[1] = UPPER_CASE;&lt;br /&gt;
                    }else if(m_collator.rupare(subPatt, subPatt.toLowerCase(locale)) == 0){&lt;br /&gt;
                       diff[1] = LOWER_CASE; &lt;br /&gt;
                    }&lt;br /&gt;
                    &lt;br /&gt;
                    if(((diff[0] == UPPER_CASE) &amp;amp;&amp;amp; ( diff[1] == LOWER_CASE)) ||&lt;br /&gt;
                       ((diff[0] == LOWER_CASE) &amp;amp;&amp;amp; ( diff[1] == UPPER_CASE))){        &lt;br /&gt;
                        return diff;&lt;br /&gt;
                    }else{// not case diff&lt;br /&gt;
                      continue; &lt;br /&gt;
                    }  &lt;br /&gt;
                }else{&lt;br /&gt;
                    continue; &lt;br /&gt;
                }&lt;br /&gt;
                    &lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
                           &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
 // Return a mask for the part of the order we&amp;quot;re interested in&lt;br /&gt;
    private static final int getMask(final int strength) {&lt;br /&gt;
        switch (strength) {&lt;br /&gt;
            case Collator.PRIMARY:&lt;br /&gt;
                return 0xFFFF0000;&lt;br /&gt;
            case Collator.SECONDARY:&lt;br /&gt;
                return 0xFFFFFF00;&lt;br /&gt;
            default: &lt;br /&gt;
                return 0xFFFFFFFF;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //get collation element with given strength&lt;br /&gt;
    // from the element with max strength&lt;br /&gt;
  private final int getElement(int maxStrengthElement){&lt;br /&gt;
    &lt;br /&gt;
    return (maxStrengthElement &amp;amp; m_mask);&lt;br /&gt;
  }  &lt;br /&gt;
}//StringComparable&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Sort string array with Collator ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedWriter;&lt;br /&gt;
import java.io.OutputStreamWriter;&lt;br /&gt;
import java.io.Writer;&lt;br /&gt;
import java.text.Collator;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    String[] words = { &amp;quot;&amp;amp;eacute;&amp;quot;, &amp;quot;e&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;c&amp;quot; };&lt;br /&gt;
    Writer w = new BufferedWriter(new OutputStreamWriter(System.out, &amp;quot;Cp850&amp;quot;));&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      w.write(words[i] + &amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    sortArray(Collator.getInstance(), words);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      w.write(words[i] + &amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    w.flush();&lt;br /&gt;
    w.close();&lt;br /&gt;
  }&lt;br /&gt;
  public static void sortArray(Collator collator, String[] strArray) {&lt;br /&gt;
    String tmp;&lt;br /&gt;
    if (strArray.length == 1)&lt;br /&gt;
      return;&lt;br /&gt;
    for (int i = 0; i &amp;lt; strArray.length; i++) {&lt;br /&gt;
      for (int j = i + 1; j &amp;lt; strArray.length; j++) {&lt;br /&gt;
        if (collator.rupare(strArray[i], strArray[j]) &amp;gt; 0) {&lt;br /&gt;
          tmp = strArray[i];&lt;br /&gt;
          strArray[i] = strArray[j];&lt;br /&gt;
          strArray[j] = tmp;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Sort strings using Collator class ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.Collator;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Collections;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    List&amp;lt;String&amp;gt; fruits = new ArrayList&amp;lt;String&amp;gt;();&lt;br /&gt;
    fruits.add(&amp;quot;A&amp;quot;);&lt;br /&gt;
    fruits.add(&amp;quot;&amp;amp;eacute;&amp;quot;);&lt;br /&gt;
    fruits.add(&amp;quot;C&amp;quot;);&lt;br /&gt;
    fruits.add(&amp;quot;D&amp;quot;);&lt;br /&gt;
    fruits.add(&amp;quot;A&amp;quot;);&lt;br /&gt;
    Collator collator = Collator.getInstance(Locale.US);&lt;br /&gt;
    Collections.sort(fruits, collator);&lt;br /&gt;
    for (int i = 0; i &amp;lt; fruits.size(); i++) {&lt;br /&gt;
      String fruit = fruits.get(i);&lt;br /&gt;
      System.out.println(&amp;quot;Fruit = &amp;quot; + fruit);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Use RuleBasedCollator ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *&lt;br /&gt;
 *   - Redistributions of source code must retain the above copyright&lt;br /&gt;
 *     notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 *   - Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *     notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *     documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 *   - Neither the name of Sun Microsystems nor the names of its&lt;br /&gt;
 *     contributors may be used to endorse or promote products derived&lt;br /&gt;
 *     from this software without specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS&lt;br /&gt;
 * IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR&lt;br /&gt;
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
import java.text.Collator;&lt;br /&gt;
import java.text.ParseException;&lt;br /&gt;
import java.text.RuleBasedCollator;&lt;br /&gt;
public class RulesDemo {&lt;br /&gt;
  public static void sortStrings(Collator collator, String[] words) {&lt;br /&gt;
    String tmp;&lt;br /&gt;
    for (int i = 0; i &amp;lt; words.length; i++) {&lt;br /&gt;
      for (int j = i + 1; j &amp;lt; words.length; j++) {&lt;br /&gt;
        // Compare elements of the words array&lt;br /&gt;
        if (collator.rupare(words[i], words[j]) &amp;gt; 0) {&lt;br /&gt;
          // Swap words[i] and words[j]&lt;br /&gt;
          tmp = words[i];&lt;br /&gt;
          words[i] = words[j];&lt;br /&gt;
          words[j] = tmp;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void printStrings(String[] words) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; words.length; i++) {&lt;br /&gt;
      System.out.println(words[i]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  static public void main(String[] args) {&lt;br /&gt;
    String englishRules = (&amp;quot;&amp;lt; a,A &amp;lt; b,B &amp;lt; c,C &amp;lt; d,D &amp;lt; e,E &amp;lt; f,F &amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt; g,G &amp;lt; h,H &amp;lt; i,I &amp;lt; j,J &amp;lt; k,K &amp;lt; l,L &amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt; m,M &amp;lt; n,N &amp;lt; o,O &amp;lt; p,P &amp;lt; q,Q &amp;lt; r,R &amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt; s,S &amp;lt; t,T &amp;lt; u,U &amp;lt; v,V &amp;lt; w,W &amp;lt; x,X &amp;quot; + &amp;quot;&amp;lt; y,Y &amp;lt; z,Z&amp;quot;);&lt;br /&gt;
    String smallnTilde = new String(&amp;quot;\u00F1&amp;quot;);&lt;br /&gt;
    String capitalNTilde = new String(&amp;quot;\u00D1&amp;quot;);&lt;br /&gt;
    String traditionalSpanishRules = (&amp;quot;&amp;lt; a,A &amp;lt; b,B &amp;lt; c,C &amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt; ch, cH, Ch, CH &amp;quot; + &amp;quot;&amp;lt; d,D &amp;lt; e,E &amp;lt; f,F &amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt; g,G &amp;lt; h,H &amp;lt; i,I &amp;lt; j,J &amp;lt; k,K &amp;lt; l,L &amp;quot; + &amp;quot;&amp;lt; ll, lL, Ll, LL &amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt; m,M &amp;lt; n,N &amp;quot; + &amp;quot;&amp;lt; &amp;quot; + smallnTilde + &amp;quot;,&amp;quot; + capitalNTilde + &amp;quot; &amp;quot;&lt;br /&gt;
        + &amp;quot;&amp;lt; o,O &amp;lt; p,P &amp;lt; q,Q &amp;lt; r,R &amp;quot; + &amp;quot;&amp;lt; s,S &amp;lt; t,T &amp;lt; u,U &amp;lt; v,V &amp;lt; w,W &amp;lt; x,X &amp;quot; + &amp;quot;&amp;lt; y,Y &amp;lt; z,Z&amp;quot;);&lt;br /&gt;
    String[] words = { &amp;quot;luz&amp;quot;, &amp;quot;curioso&amp;quot;, &amp;quot;llama&amp;quot;, &amp;quot;chalina&amp;quot; };&lt;br /&gt;
    try {&lt;br /&gt;
      RuleBasedCollator enCollator = new RuleBasedCollator(englishRules);&lt;br /&gt;
      RuleBasedCollator spCollator = new RuleBasedCollator(&lt;br /&gt;
          traditionalSpanishRules);&lt;br /&gt;
      sortStrings(enCollator, words);&lt;br /&gt;
      printStrings(words);&lt;br /&gt;
      System.out.println();&lt;br /&gt;
      sortStrings(spCollator, words);&lt;br /&gt;
      printStrings(words);&lt;br /&gt;
    } catch (ParseException pe) {&lt;br /&gt;
      System.out.println(&amp;quot;Parse exception for rules&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>