【JAVA学习记录】字典程序(OO版)

结合字典程序的【内存版】和【百度版】

1.定义接口

public interface IDict {
    public String translate(String word);
}

2.实现接口

内存版:

public class LocalDict implements IDict {
    @Override
    public String translate(String word) {
        //1.读取文件
        InputStream is = IDict.class.getResourceAsStream("../words.txt"); //获取文件路径
        Scanner isSc = new Scanner(is); //转化为文件流

        Map dictMap =  new HashMap(); //创建字典用于存储文件中的数据

        //2.将文件内容存入Map中
        while (isSc.hasNext()) { //死循环
            String[] strings=isSc.nextLine().split("\t"); //按行读取文本内容,用\t分隔字符串
            if (strings.length>1) {
                dictMap.put(strings[0],strings[1]); //将字符串数组中的数据存入字典中
            }else {
                dictMap.put(strings[0],null);
            }
        }

        //3.输入要查找的单词,返回结果
        String result;
        if(dictMap.containsKey(word)){ //判断字典中是否存在键
            result = word+"\t"+dictMap.get(word); //通过键获取值
        }else{
            result = "";
        }

        return result;
    }
}

百度版(使用方法详见字典程序(百度版)):

public class BaiduDict implements IDict {
    // 在平台申请的APP_ID 详见 http://api.fanyi.baidu.com/api/trans/product/desktop?req=developer
    private static final String APP_ID = "";
    private static final String SECURITY_KEY = "";

    @Override
    public String translate(String word) {
        TransApi api = new TransApi(APP_ID, SECURITY_KEY);
        String data = api.getTransResult(word,"auto","zh");

        System.out.println(data);

        JSONObject object = JSONObject.parseObject(data);
        JSONArray array = object.getJSONArray("trans_result");
        JSONObject elem = JSONObject.parseObject(array.get(0).toString());
        String dst = elem.getString("dst");
        try{
            return URLDecoder.decode(dst,"utf-8");
        }catch (UnsupportedEncodingException e){
            e.printStackTrace();
        }
        return "";
    }
}

3.定义一个类实现下翻译的功能

public class DictFunc {
    public void welcome(){
        System.out.println("###################################");
        System.out.println("###################################");
        System.out.println("#########欢迎进入英文字典程序#########");
        System.out.println("###################################");
        System.out.println("###################################");
    }

    public String input(){
        Scanner sc=new Scanner(System.in); //定义用户输入
        System.out.print("请输入你要翻译的英文单词(回车退出):");
        return sc.nextLine(); //nextLine()吸取字符前后的空格/Tab键,回车键截止
    }

    public void run(){
        welcome();

        IDict localDict = new LocalDict();
        IDict baiduDict = new BaiduDict();

        while(true){
            String word = input();
            if (word.isEmpty()){
                break;
            }

            String result = localDict.translate(word);
            if (result.isEmpty()){
                result = baiduDict.translate(word);
            }

            if (result == null || result.isEmpty()){
                System.out.printf("找不到单词%s.\n",word,result);
            }
            else{
                System.out.printf("%s\t%s\n",word,result);
            }
        }
    }
}

4.Main类

public class Main {
    public static void main(String[] args) {
        DictFunc dictFunc = new DictFunc();
        dictFunc.run();
    }
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值