Java 字符排序問題


Java 字符排序問題

未專注於排序算法,而是寫了一個MyString類,實現了comparable的接口,然后用Arrays的sort方法來實現排序。我覺得這道題的難度在於如果比較兩個。因為大小寫的關系,實現起來有點復雜。

這是類一

 

  1. import java.util.Arrays;
  2. /*1.對字符串進行排序,用任意一種編程語言來實現,不能使用現有的類,在排序中,
  3. 字符串“Bc”,“Ad”,“aC”,“Hello”,“X man”,“little”,“During”,“day”
  4. 能夠排序成 “Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Hello”,
  5. 也就是說,在排序的過程並不是傳統的按照字符串排序,在排序中還需要將小寫字母一並排序,
  6. 也就是說a字符串要在B或b之前。*/
  7. public class LetterSort {
  8.     public static void main(String[] args) {
  9.         // TODO Auto-generated method stub
  10.         String[] str = { "dad", 
  11.                          "bOod",
  12.                          "bada","Admin","Good","aete","cc","Ko","Beta","Could"}; 
  13.         MyString[] strcompare = new MyString[str.length];
  14.         for(int i = 0;i<str.length;i++){
  15.             strcompare[i] = new MyString(str[i]);
  16.         }
  17.         Arrays.sort(strcompare);
  18.         for(MyString string:strcompare){
  19.             System.out.println(string);
  20.         }
  21.     }
  22. }

實現接口的MyString

  1. /*這個類是封裝了一個String。實現Comparable接口。這樣使得可以用Arrays的sort方法進行排序*/
  2. public class MyString implements Comparable<MyString> {
  3.     private String string;
  4.     
  5.     public void setString(String string) {
  6.         this.string = string;
  7.     }
  8.     public String getString() {
  9.         return string;
  10.     }
  11.     //構造方法
  12.     public MyString(String string){
  13.         this.string = string;
  14.     }
  15.     
  16.     
  17.     
  18.     //比較
  19.     public int compareTo(MyString other) {
  20.         // TODO Auto-generated method stub
  21.         char[] thisarr = this.string.toCharArray();        //存儲被包裝  字符串的字符數組
  22.         
  23.         char[] otherarr = other.getString().toCharArray(); //存儲要比較的字符串的字符數組
  24.         
  25.         /*取得循環次數,為兩個字符串的長度的最小值*/
  26.         int iterate = thisarr.length<otherarr.length?thisarr.length:otherarr.length;
  27.         
  28.         boolean mlowercase;                                 //記錄被封裝的字符串循環到的字符是否為小寫
  29.         
  30.         boolean olowercase;                                 //記錄要比較的字符串循環到的字符是否為小寫                               
  31.         
  32.         char    thisletter;                                 //記錄被封裝的字符串循環到的字符
  33.         
  34.         char    otherletter;                                //記錄要比較的字符串循環到的字符 
  35.         
  36.         /*字符串相等,則返回0*/
  37.         if(this.getString().equals(other.getString())){
  38.             return 0;
  39.         }
  40.         
  41.         /*循環字符串,做比較*/
  42.         for(int i=0;i<iterate;i++){
  43.             mlowercase = this.isLowercase(thisarr[i]);        
  44.             olowercase = this.isLowercase(otherarr[i]);
  45.             
  46.             /*把比較字符變成大寫*/
  47.             thisletter = mlowercase?(char)(thisarr[i]-32):thisarr[i]; 
  48.             otherletter = olowercase?(char)(otherarr[i]-32):otherarr[i];
  49.             
  50.             /*比較*/
  51.             if(thisletter!=otherletter){               //比較字母大小,不相等,則取差值,字母小的在前面
  52.                 return (thisletter-otherletter);
  53.             }else{                                     //字母的大寫形式相同
  54.                 if(mlowercase == olowercase){          //此位置大小寫形式相同,判斷下一個字符;
  55.                     continue;
  56.                 }else if(mlowercase){                  //被封裝的字符為小寫,則返回負值
  57.                     return 32;
  58.                 }else if(olowercase){                  //比較字符串的字符為小寫,則返回正直
  59.                     return -32;
  60.                 }
  61.             }
  62.             
  63.         }
  64.         
  65.         /*如果循環好之后還分不出大小,則小的排在后面*/
  66.         return (thisarr.length<otherarr.length?-1:1);
  67.     }
  68.     
  69.     @Override
  70.     public String toString() {
  71.         // TODO Auto-generated method stub
  72.         return string;
  73.     }
  74.     //通過碼值,來判斷字符是否為小寫字母
  75.     private boolean isLowercase(char ch){
  76.         if((int)ch >=97 && (int)ch<=122){
  77.             return true;
  78.         }else{
  79.             return false;
  80.         }
  81.     }
  82. }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM