zoukankan      html  css  js  c++  java
  • 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. }

    逼着你往前走的,不是前方梦想的微弱光芒,而是身后现实的万丈深渊。 ---------致自己
  • 相关阅读:
    《把时间当作朋友》读书笔记
    Oracle&SQLServer中实现跨库查询
    Android学习——界面互调2
    《IT不再重要》读后感
    Android学习——数据存储
    Android学习——编写菜单
    Android学习——后台程序
    Android学习——写个小实例
    Android学习——界面编程!
    深入理解JavaScript系列(42):设计模式之原型模式
  • 原文地址:https://www.cnblogs.com/Fairy-02-11/p/6202979.html
Copyright © 2011-2022 走看看