题目描述
主机名由多级域名组成,自右向左,依次是顶级域名、二级域名、三级域名,例如huawei.com.cn,cn是顶级域名,com是二级域名,huawei是
三级域名。
请编写一段程序,实现主机名排序功能,排序规则以及限制条件如下:
1、主机名按照域名等级排序,即先顶级域名排序,再二级域名排序,最后是三级域名排序;
2、每一级域名排序时,参考字典顺序定义,abc 排在 abf,abc 排在 abcd 前。
3、输入的主机名确保符合以下规则
A、主机名以字符串形式给出,连续的两个主机名,以’$’符号分开;
B、主机名中仅包含小写英文字母和分隔符’.’;
C、主机名中没有连续的’.’,不以’.’开始,也不以’.’结束;
D、主机名不存在重复。
输入
输入为字符串,包含多个主机名,主机名之间以’$’符号分开。
输出
输出为经过排序后的字符串,主机名之间以’$’符号分开。
样例输入
huawei.com.cn$mail.huawei.com$imail.huawei.com$cctv.com.cn$bctv.com.cn
样例输出
cctv.com.cn$huawei.com.cn$imail.huawei.com$mail.huawei.com
cctv.com.cn$huawei.com.cn$imail.huawei.com$mail.huawei.com
提示
NO
地区
成都研究所
产品线
公共
阶段
招聘
难度
2级
public String sortZhuJiMing(String input){
String[] zjmArr=input.split("\\$");
LinkedHashMap<String,String> lhm=new LinkedHashMap<String,String>();
for(int i=0;i<zjmArr.length;i++){
String[] value=zjmArr[i].split("\\.");
lhm.put(zjmArr[i],value[2]);
}
LinkedList<Map.Entry<String, String>> list = sort(lhm);//顶级域名排序
LinkedHashMap<String,String> lhm1=new LinkedHashMap<String,String>();
for(Map.Entry<String,String> l:list){
String[] value= l.getKey().split("\\.");
lhm1.put(l.getKey(), value[1]);
}
LinkedList<Map.Entry<String,String>> listt=sort(lhm1);//一级域名排序
LinkedHashMap<String,String> lhm2=new LinkedHashMap<String,String>();
for(Map.Entry<String,String> l:listt){
String[] value= l.getKey().split("\\.");
lhm2.put(l.getKey(), value[0]);
}
LinkedList<Map.Entry<String,String>> listtt=sort(lhm2);//二级域名排序
StringBuilder sb=new StringBuilder();
for(Map.Entry<String,String> l:listtt){
sb.append(l.getKey()+"$");
}
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
public LinkedList<Map.Entry<String, String>> sort(LinkedHashMap<String, String> lhm) {
LinkedList<Map.Entry<String,String>> list=new LinkedList<Map.Entry<String,String>>(lhm.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,String>>(){
@Override
public int compare(Entry<String, String> o1,Entry<String, String> o2) {
return o1.getValue().compareTo(o2.getValue()) ;}});
return list;
}