zoukankan      html  css  js  c++  java
  • 通过读取配置文件完成英汉转换

            用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=u78c1u76d8                 
    #空间
    space=u7a7au95f4
    #在
    on=u5728
    #数据库
    datastore=u6570u636eu5e93
    #不足
    insufficient=u4e0du8db3
    

            配置文件采用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 = " :,.!
    	";
    		//构造一个解析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种方法都可以。。


  • 相关阅读:
    CSS经典实用技巧10招
    分析与设计数据库模型的简单过程
    MS SQL数据类型及长度限制
    firefox与IE的nextSibling
    DIV+CSS布局总结
    Sql Server查找临时表,并删除
    powerDesigner15.1破解
    分别使用函数及游标实现SQL多行转一列
    生命的帐单
    北京有380万“北漂族” 没有归属感但不离不弃!
  • 原文地址:https://www.cnblogs.com/chenghao1/p/7719170.html
Copyright © 2011-2022 走看看