一种字母排序方式

xiaoxiao2022-06-14  40

       这里我没有专注于排序算法,而是写了一个MyString类,实现了comparable的接口,然后用Arrays的sort方法来实现排序。我觉得这道题的难度在于如果比较两个。因为大小写的关系,实现起来有点复杂。

这是类一

       

import java.util.Arrays;/*1.对字符串进行排序,用任意一种编程语言来实现,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“X man”,“little”,“During”,“day”能够排序成 “Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Hello”,也就是说,在排序的过程并不是传统的按照字符串排序,在排序中还需要将小写字母一并排序,也就是说a字符串要在B或b之前。*/public class LetterSort {    public static void main(String[] args) {        // TODO Auto-generated method stub         String[] str = { "dad",                          "bOod",                         "bada","Admin","Good","aete","cc","Ko","Beta","Could"};         MyString[] strcompare = new MyString[str.length];        for(int i = 0;i<str.length;i++){            strcompare[i] = new MyString(str[i]);        }        Arrays.sort(strcompare);        for(MyString string:strcompare){            System.out.println(string);        }    }}

实现接口的MyString

/*这个类是封装了一个String。实现Comparable接口。这样使得可以用Arrays的sort方法进行排序*/public class MyString implements Comparable<MyString> {    private String string;        public void setString(String string) {        this.string = string;    }    public String getString() {        return string;    }    //构造方法     public MyString(String string){        this.string = string;    }                //比较     public int compareTo(MyString other) {        // TODO Auto-generated method stub         char[] thisarr = this.string.toCharArray();        //存储被包装  字符串的字符数组                 char[] otherarr = other.getString().toCharArray(); //存储要比较的字符串的字符数组                 /*取得循环次数,为两个字符串的长度的最小值*/        int iterate = thisarr.length<otherarr.length?thisarr.length:otherarr.length;                boolean mlowercase;                                 //记录被封装的字符串循环到的字符是否为小写                 boolean olowercase;                                 //记录要比较的字符串循环到的字符是否为小写                                                char    thisletter;                                 //记录被封装的字符串循环到的字符                 char    otherletter;                                //记录要比较的字符串循环到的字符                  /*字符串相等,则返回0*/        if(this.getString().equals(other.getString())){            return 0;        }                /*循环字符串,做比较*/        for(int i=0;i<iterate;i++){            mlowercase = this.isLowercase(thisarr[i]);                    olowercase = this.isLowercase(otherarr[i]);                        /*把比较字符变成大写*/            thisletter = mlowercase?(char)(thisarr[i]-32):thisarr[i];             otherletter = olowercase?(char)(otherarr[i]-32):otherarr[i];                        /*比较*/            if(thisletter!=otherletter){               //比较字母大小,不相等,则取差值,字母小的在前面                 return (thisletter-otherletter);            }else{                                     //字母的大写形式相同                 if(mlowercase == olowercase){          //此位置大小写形式相同,判断下一个字符;                     continue;                }else if(mlowercase){                  //被封装的字符为小写,则返回负值                     return 32;                }else if(olowercase){                  //比较字符串的字符为小写,则返回正直                     return -32;                }            }                    }                /*如果循环好之后还分不出大小,则小的排在后面*/        return (thisarr.length<otherarr.length?-1:1);    }        @Override    public String toString() {        // TODO Auto-generated method stub         return string;    }    //通过码值,来判断字符是否为小写字母     private boolean isLowercase(char ch){        if((int)ch >=97 && (int)ch<=122){            return true;        }else{            return false;        }    }}

 

转载请注明原文地址: https://www.6miu.com/read-4936545.html

最新回复(0)