汉字排序_java_转转

java中漢字按拼音排序

文章分类:Java编程

 

最近項目中需要對繁體字按拼音進行排序

 

Java代码
  1. public   static   void  main(String[] args) {   
  2.          
  3.   Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);       
  4.   
  5.   String[] arr = { "张三" "李四" "王五" "刘六"  , "周濤" , "戴笠" , "戴阿" };   
  6.   String[] arr1 = {"生活" , "文教" , "政治" , "自然" , "宗教" , "經貿" , "軍事" , "经贸" };   
  7.   
  8. //對簡體字有效,戴阿、戴笠在第一個字相同的情況下按拼音比較第二個字,很智能哦    
  9.   Arrays.sort(arr, cmp);   
  10.   for  ( int  i =  0 ; i < arr.length; i++)   
  11. //輸出:戴阿、戴笠、李四、刘六、王五、张三、周濤    
  12.       System.out.println(arr[i]);   
  13.   
  14. //對繁體字無效,繁體的“軍事”被拍到了最后    
  15.   Arrays.sort(arr1, cmp);   
  16.   for  ( int  i =  0 ; i < arr1.length; i++)   
  17.       //輸出:经贸、生活、文教、政治、自然、宗教、經貿、軍事    
  18.       System.out.println(arr1[i]);   
  19. }   
public static void main(String[] args) { 
       
  Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);     

  String[] arr = { "张三", "李四", "王五", "刘六" ,"周濤","戴笠","戴阿"}; 
  String[] arr1 = {"生活","文教","政治","自然","宗教","經貿","軍事","经贸"}; 

//對簡體字有效,戴阿、戴笠在第一個字相同的情況下按拼音比較第二個字,很智能哦 
  Arrays.sort(arr, cmp); 
  for (int i = 0; i < arr.length; i++) 
//輸出:戴阿、戴笠、李四、刘六、王五、张三、周濤 
      System.out.println(arr[i]); 

//對繁體字無效,繁體的“軍事”被拍到了最后 
  Arrays.sort(arr1, cmp); 
  for (int i = 0; i < arr1.length; i++) 
      //輸出:经贸、生活、文教、政治、自然、宗教、經貿、軍事 
      System.out.println(arr1[i]); 
} 

 關于繁體字按拼音排序,可以利用util包下的Comparator接口,按自定義的規則實現compare方法即可。以下是個例子:

Java代码
  1. package  zhouyrt;   
  2. import  java.util.ArrayList;   
  3. import  java.util.Arrays;   
  4. import  java.util.Comparator;   
  5. import  java.util.List;   
  6. public   class  PinyinPaixu {   
  7.      static   class  Person {   
  8.      
  9.      private  String name;   
  10.      private  Integer salary; //薪水    
  11.      private  Integer age; //年齡    
  12.      
  13.     Person(String n, Integer s, Integer a) {   
  14.        this .name = n;   
  15.        this .salary = s;   
  16.        this .age = a;   
  17.     }   
  18.      
  19.     public  String getName() {   
  20.        return  name;   
  21.     }   
  22.     public   void  setName(String name) {   
  23.       this .name = name;   
  24.     }   
  25.     public  Integer getSalary() {   
  26.       return  salary;   
  27.     }   
  28.     public   void  setSalary(Integer salary) {   
  29.       this .salary = salary;   
  30.     }   
  31.     public  Integer getAge() {   
  32.       return  age;   
  33.     }   
  34.     public   void  setAge(Integer age) {   
  35.       this .age = age;   
  36.     }   
  37.      
  38.     public  String toString() {   
  39.       return   "姓名:"  +  this .name +  "\t薪水:"  +  this .salary +  "\t年齡:"  +  this .age;   
  40.     }   
  41. }   
package zhouyrt; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Comparator; 
import java.util.List; 
public class PinyinPaixu { 
     static class Person { 
   
     private String name; 
     private Integer salary;//薪水 
     private Integer age;//年齡 
   
    Person(String n, Integer s, Integer a) { 
       this.name = n; 
       this.salary = s; 
       this.age = a; 
    } 
   
    public String getName() { 
       return name; 
    } 
    public void setName(String name) { 
      this.name = name; 
    } 
    public Integer getSalary() { 
      return salary; 
    } 
    public void setSalary(Integer salary) { 
      this.salary = salary; 
    } 
    public Integer getAge() { 
      return age; 
    } 
    public void setAge(Integer age) { 
      this.age = age; 
    } 
   
    public String toString() { 
      return "姓名:" + this.name + "\t薪水:" + this.salary + "\t年齡:" + this.age; 
    } 
} 
 

 

Java代码
  1. /*   
  2. * 按薪水排序,從低到高   
  3. */    
  4.    static   class  SalaryComparator  implements  Comparator {   
  5.       public   int  compare(Object o1, Object o2) {   
  6.      
  7.          Integer salary1 = ((Person)o1).salary;   
  8.          Integer salary2 = ((Person)o2).salary;   
  9.          if (salary1 - salary2 >  0 )   
  10.            return   1 ;   
  11.         if (salary1 - salary2 <  0 )   
  12.            return  - 1 ;   
  13.         else    
  14.            return   0 ;   
  15.       }     
  16.   }   
/* 
* 按薪水排序,從低到高 
*/ 
   static class SalaryComparator implements Comparator { 
      public int compare(Object o1, Object o2) { 
   
         Integer salary1 = ((Person)o1).salary; 
         Integer salary2 = ((Person)o2).salary; 
         if(salary1 - salary2 > 0) 
           return 1; 
        if(salary1 - salary2 < 0) 
           return -1; 
        else 
           return 0; 
      }   
  } 

 

 

Java代码
  1. /*   
  2. * 按年齡排序,從低到高   
  3. */    
  4.    static   class  AgeComparator  implements  Comparator {   
  5.        public   int  compare(Object o1, Object o2) {   
  6.      
  7.           Integer age1 = ((Person)o1).age;   
  8.           Integer age2 = ((Person)o2).age;   
  9.           if (age1 - age2 >  0 )   
  10.                return   1 ;   
  11.           if (age1 - age2 <  0 )   
  12.                return  - 1 ;   
  13.           else    
  14.                 return   0 ;   
  15.        }     
  16.    }   
/* 
* 按年齡排序,從低到高 
*/ 
   static class AgeComparator implements Comparator { 
       public int compare(Object o1, Object o2) { 
   
          Integer age1 = ((Person)o1).age; 
          Integer age2 = ((Person)o2).age; 
          if(age1 - age2 > 0) 
               return 1; 
          if(age1 - age2 < 0) 
               return -1; 
          else 
                return 0; 
       }   
   } 
 
main方法測試:

Java代码
  1. public   static   void  main(String[] args) {   
  2.      
  3.        List<Person> list = new  ArrayList<Person>();   
  4.        list.add(new  Person( "張洋" , 3400 , 25 ));   
  5.        list.add(new  Person( "王肅" , 10000 , 27 ));   
  6.        list.add(new  Person( "李安" , 9000 , 30 ));   
  7.        list.add(new  Person( "劉虎" , 2500 , 22 ));   
  8.        list.add(new  Person( "安德剛" , 3500 , 21 ));   
  9.        Person[] personAry = new  Person[list.size()];     
  10.        personAry = list.toArray(new  Person[list.size()]);   
  11.   
  12.      
  13.       System.out.println("--- 排序前 ------------------------------------" );   
  14.       for (Person p : personAry) {   
  15.           System.out.println(p);   
  16.       }   
  17.       Arrays.sort(personAry,new  SalaryComparator());   
  18.       System.out.println("--- 按薪水排序后 ------------------------------------" );   
  19.       for (Person p : personAry) {   
  20.           System.out.println(p);   
  21.       }   
  22.      
  23.       Arrays.sort(personAry,new  AgeComparator());   
  24.       System.out.println("--- 按年齡排序后 ------------------------------------" );   
  25.       for (Person p : personAry) {   
  26.           System.out.println(p);   
  27.       }   
  28.      
  29.    }   
  30. }   
public static void main(String[] args) { 
   
       List<Person> list = new ArrayList<Person>(); 
       list.add(new Person("張洋",3400,25)); 
       list.add(new Person("王肅",10000,27)); 
       list.add(new Person("李安",9000,30)); 
       list.add(new Person("劉虎",2500,22)); 
       list.add(new Person("安德剛",3500,21)); 
       Person[] personAry = new Person[list.size()];   
       personAry = list.toArray(new Person[list.size()]); 

   
      System.out.println("--- 排序前 ------------------------------------"); 
      for(Person p : personAry) { 
          System.out.println(p); 
      } 
      Arrays.sort(personAry,new SalaryComparator()); 
      System.out.println("--- 按薪水排序后 ------------------------------------"); 
      for(Person p : personAry) { 
          System.out.println(p); 
      } 
   
      Arrays.sort(personAry,new AgeComparator()); 
      System.out.println("--- 按年齡排序后 ------------------------------------"); 
      for(Person p : personAry) { 
          System.out.println(p); 
      } 
   
   } 
} 
 
以下是輸出結果:

--- 排序前 ------------------------------------
姓名:張洋 薪水:3400 年齡:25
姓名:王肅 薪水:10000 年齡:27
姓名:李安 薪水:9000 年齡:30
姓名:劉虎 薪水:2500 年齡:22
姓名:安德剛 薪水:3500 年齡:21

--- 按薪水排序后 ------------------------------------
姓名:劉虎 薪水:2500 年齡:22
姓名:張洋 薪水:3400 年齡:25
姓名:安德剛 薪水:3500 年齡:21
姓名:李安 薪水:9000 年齡:30
姓名:王肅 薪水:10000 年齡:27

--- 按年齡排序后 ------------------------------------
姓名:安德剛 薪水:3500 年齡:21
姓名:劉虎 薪水:2500 年齡:22
姓名:張洋 薪水:3400 年齡:25
姓名:王肅 薪水:10000 年齡:27
姓名:李安 薪水:9000 年齡:30

你可能感兴趣的:(java,编程,生活)