通过配置文件完成一个简单的英汉转换

        用java写一个英汉翻译的函数,首先想一下需要完成几个步骤。

1. 判断消息中是否含有英文。
2. 读取词库文件。
3. 将消息截取成单个的单词。
4. 将单词与词库中相对应的汉语替换。
5. 返回翻译好的消息。

        判断消息中是否含有英文,运用了正则表达式去匹配字符串中是否含有字母。
判断含有英文代码如下:

/**
     * 日志消息是否含有英文
     *
     * @param str
     * @return
     */
    public boolean judgeContainsStr(String str) {
        if (StringUtils.isBlank(str)) {
            return false;
        }
        String regex = "[a-zA-Z]";
        Pattern p = Pattern.compile(regex);
        return p.matcher(str).find();
    }



        如果含有英文,那么进入翻译函数中进行英汉的转换。因为要应用在项目中,那么写死或者从本地读取词库都是不合适的,因此这里引入了properties类,应用了这种配置文件的方式进行词库的生成,这样放在项目中,将来添加新的单词就只需在配置文件中进行新增。

配置文件如下:translation.properties

#磁盘
disk=\u78c1\u76d8                 
#空间
space=\u7a7a\u95f4
#在
on=\u5728
#数据库
datastore=\u6570\u636e\u5e93
#不足
insufficient=\u4e0d\u8db3

        配置文件采用Key = Value 的格式,这里把汉字转换成了ASCLL码是为了防止发生乱码的问题,给大家提供一个比较好用的在线转码工具

        在翻译函数中,通过FileInputStream来获取配置文件中的内容,这里如果获取不到的话,最后会讲解一下相关问题。获取到词库后,通过构造一个解析str的StringTokenizer对象,根据分隔符分隔,再调用相关函数将传进来的消息分隔为单个单词。然后通过properties的方法properties.getProperty(key)方法搜索是否存在单词。如果存在,那么替换。这样,一个通过读取配置文件的英汉转换函数就完成了。
/font>

翻译函数代码如下:

/**
     * 日志消息英译汉
     *
     * @param message
     * @return
     */
    public String operationResultMessageTranslate(String message) {
        if (StringUtils.isBlank(message)) {
            return null;
        }
        Properties properties = new Properties();
        FileInputStream fileInputStream =null;
        try {
            //获取配置文件中的词库
            fileInputStream = new FileInputStream("src/main/resources/translation.properties");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            //加载属性列表到properties对象中
            properties.load(fileInputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //指定分隔符
        String delim = " :,.!\n\t";
        //构造一个解析str的StringTokenizer对象,并提供指定的分隔符,同时,指定不返回分隔符
        StringTokenizer str = new StringTokenizer(message, delim, false);
        while (str.hasMoreTokens()) {
            //分割出的一个个单词
            String sub = str.nextToken();
            //统一转换为小写
            String lowerSub = sub.toLowerCase();
            //从词库中找匹配的项
            String newSub = properties.getProperty(lowerSub);
            //如果找到了匹配的汉字,则进行替换
            if (newSub != null) {
                message = message.replaceFirst(sub, newSub);
            }
        }
        return message;
    }



注意:如果properties获取不到配置文件,提示系统找不到相关文件的话,那么我们需要理解一下读取的方法。

为什么用FileInputStream找不到路径?
因为FileInputStream这个类读取的相对路径针对的是项目根目录的 。根目录工程包就是java语法这个包。
要找到person.xml,应该写成 src/res/person.xml .
如果用getResource,
InputStream is=getClass().getResourceAsStream(“../res/person.properties”);
这个是从当前java原文件处开始读的。
还有一种方法:资源文件db.properties放在ClassPath下(src目录中)
我们需要加”/”,可以理解为在ClassPath下寻找,即src目录
InputStream in = Test1.class.getResourceAsStream(“/res/db.properties”);
上面3种方法都可以。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值