我有一个.dat文件,其中包含需要按网站扩展名(.com,.edu,.org ... etc)按字母顺序排序的网站列表。还需要按域名按字母顺序排序。我必须为此编写一个compareTo()方法。我已经按扩展名排序了,所以现在我只需要按域名排序。他们从另一个类的数组列表进入这个类

SiteName类实现Comparable

{

private String webname;
public SiteName(String n){
    webname=n;
}
public int compareTo(SiteName s){
    int ext1=this.webname.indexOf('.');
    int ext2=s.webname.indexOf('.');
    if (this.webname.charAt(ext1+1)>s.webname.charAt(ext2+1))
        return 1;
    else return -1;



}
public String toString(){
    return webname;
}


}

最佳答案

使用indexOf()中的索引对扩展名进行子字符串化,然后比较扩展名。如果扩展名相同,则比较完整的站点名称:

public int compareTo(SiteName that) {
    int cmp = this.getWebnameExt().compareTo(that.getWebnameExt());
    if (cmp == 0)
        cmp = this.webname.compareTo(that.webname);
    return cmp;
}
private String getWebnameExt() {
    int idx = this.webname.indexOf('.');
    return (idx == -1 ? "" : this.webname.substring(idx));
}


为了提高性能,您可能需要缓存扩展。

07-24 09:15