我有一个.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));
}
为了提高性能,您可能需要缓存扩展。