用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种方法都可以。。