• 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. }

    逼着你往前走的,不是前方梦想的微弱光芒,而是身后现实的万丈深渊。 ---------致自己
  • 相关阅读:
    ajax专题
    luogu P1346 电车 最短路
    luogu P1462 通往奥格瑞玛的道路 最短路
    luogu P1328 生活大爆炸版石头剪刀布
    luogu P1315 联合权值 枚举
    luogu P1156 垃圾陷阱 背包问题
    luogu P1217 回文质数 枚举
    luogu P3650 滑雪课程设计 枚举
    luogu1209 修理牛棚 贪心
    luogu P1223 排队接水 贪心
  • 原文地址:https://www.cnblogs.com/Fairy-02-11/p/6202979.html
Copyright © 2020-2023  润新知