首页 > 试题广场 >

一个文件 a.txt 存着所有汉字的拼音,格式为以分号分隔的

[问答题]
个文件 a.txt 存着所有汉字的拼音,格式为以分号分隔的键值对,key 个汉字, value 为大写的拼音,类似"...=FAN;=RUAN..."。现在输入两个 char(java 中的 unicode ),需要比较大小,规则为:
1)非汉字(即不在文件中的 key )永远小于汉字
2)两个非汉字的大小顺序即为 unicode 码的大小
3)两个汉字的大小为拼音字符串的顺序,例如 帆(FAN)<(RUAN)。拼音相等则再比较unicode

请先用文字描述实现思路,再用代码实现上述拼音排序,在做好初始化的前提下,提供一个 int compare(char c1,char c2)方法,以最快的速度返回两个 char 的比较结果(该方法可能会被调用上亿次) (请用代码实现)
static int compare(char c1,char c2){
        if(infile(c1)==0&&infile(c2)==0){
            if(c1>c2) return 1;
            else if(c1==c2) return 0;
            else return -1;
        }else if(infile(c1)==0&&infile(c2)==1){
            return -1;
        }else if(infile(c1)==1&&infile(c2)==0){
            return 1;
        }else {
                char[] a = map.get(c1).toCharArray();
                char[] b = map.get(c2).toCharArray();
                int n = Math.min(a.length,b.length);
                for (int i = 0;i<n;i++){
                    if(a[i]<b[i]){
                        return -1;
                    }else if(a[i]>b[i]){
                        return 1;
                    }
                }
            if(c1>c2) return 1;
            else if(c1==c2) return 0;
            else return -1;
        }
        
    }

    static int infile(char c1){
        readfile(new File("b.txt"));
        if(map.containsKey(c1)) return 1;
        else return 0;
    }
    static void readfile(File file){
        StringBuilder text = new StringBuilder();
        try{
            BufferedReader br = new BufferedReader( new FileReader(file));
            String s  =null;
            while((s = br.readLine())!=null){
                text.append(s);
            }
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String[] strs =  text.toString().split(";");
       
        for (String str:strs
             ) {
            String[] arr = str.split("=");
            map.put(arr[0].charAt(0),arr[1]);
        }
    }

发表于 2020-03-02 23:46:42 回复(2)
是不是要先把文件中的键值对转换为hashmap类型,然后再去进行比较
发表于 2020-02-19 08:42:04 回复(0)