首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java面试题,给一组域名排序解决方案

2012-03-14 
java面试题,给一组域名排序google.cnlinggui.gov.cnbaidu.comgoogle.com.hkzhidao.baidu.comgoogle.comsin

java面试题,给一组域名排序
google.cn
linggui.gov.cn
baidu.com
google.com.hk
zhidao.baidu.com
google.com
sina.com
tw.msn.com
给上面一组域名排序:
1. 从每个域名的最后一组开始比较(好像要先把域名从. 的地方分开), 按域名的字母先后顺序 (a,b,c,...,z),如果相同依次往前比较。
  例如google.com和baidu.com比较, 先比较com和com,两个com相同,往前比较google与baidu,b在g前,
  因此顺序为:
  baidu.com
  google.com

2. 如果首字目相同,比较下一个字母依次类推
  例如linggui.gov.cn和google.com比较
  先比较cn和com, c相同,比较第二个n与o,n在o前,
  因此顺序为:
  linggui.gov.cn
  google.com

3. 比较如遇到空格放到字母前面,例如zhidao.baidu.com与baidu.com比较,
  顺序为: baidu.com
  zhidao.baidu.com
4. 不考虑?+ 、/等特殊字符

请给出思路及代码,谢谢!(好像用到递归)


[解决办法]
Arrays类有排序功能,然后自己定义一个排序规则就行了

Java code
import java.util.*;public class Test{    public static void main(String[] args)    {        String[] strs = new String[] {"google.cn",                                    "linggui.gov.cn",                                    "baidu.com",                                    "google.com.hk",                                    "zhidao.baidu.com",                                    "google.com",                                    "sina.com",                                    "tw.msn.com"};                Arrays.sort(strs, new Comparator<String>()            {                public int compare(String str1, String str2)                 {                    String[] strs1 = str1.split("\\.");                    String[] strs2 = str2.split("\\.");                    reverse(strs1);                    reverse(strs2);                    int length = strs1.length < strs2.length ? strs1.length : strs2.length;                    for (int i = 0; i < length; i++)                    {                        int cmp = strs1[i].compareTo(strs2[i]);                        if (cmp != 0)                        {                            return cmp;                        }                    }                        return strs1.length - strs2.length;                }                                    private void reverse(String[] strs)                {                    for (int i = 0; i < (strs.length + 1) / 2; i++)                    {                        String tmp = strs[i];                        strs[i] = strs[strs.length - i - 1];                        strs[strs.length - i - 1] = tmp;                    }                }            });                for (int i = 0; i < strs.length; i++)        {            System.out.println(strs[i]);        }    }}
[解决办法]
简单
String name="zhidao.baidu.com"; 
String[] splitnames=name.split('.');//用.拆成数组
splitnames=splitnames.reverse(); //反转数组的顺序
这样就反过来了
然后再排序就行了
[解决办法]
我做了一个 不说了上代码 简单易懂
Java code
package test;import java.util.Arrays;import org.junit.Test;import serivce.Servce;import dao.LogDao;import dao.LogDaoIml;import entity.Log;public class LogDaoImltest {    @Test    public void test() {        //new Servce().and();                 YuMing[] yms = {new YuMing("", "google", "cn"),new YuMing("zhidao", "baidu", "com"),new YuMing("", "baidu", "com")};                Arrays.sort(yms);        for(int i=yms.length-1;i>=0;i--) {            System.out.println(yms[i]);        }    }        static private class YuMing implements Comparable<YuMing> {        public String head;        public String center;        public String end;        public YuMing(String head, String center, String end) {            super();            this.head = head;            this.center = center;            this.end = end;        }        @Override        public int compareTo(YuMing ym) {            if(end.compareTo(ym.end) != 0) {                return end.compareTo(ym.end);            }            if(center.compareTo(ym.center) != 0) {                return center.compareTo(ym.center);            }                        if(head.compareTo(ym.head) != 0) {                head.compareTo(ym.head);            }            return 0;        }        @Override        public String toString() {            if(head.equals("")) {                                return center+"."+end;            }             return head+"."+center+"."+end;        }                                             }} 

热点排行