用scala做了字典选择器,根据传入请求字符串,按照两个字符为一个键使用不同的字典。
对重要的专有名词按照所选取的字典内容进行翻译,而次重要的直接使用pinyin4j转换成拼音。
第一种方式:考虑将传入字符串按照每两个字符进行切割,存入数组进行遍历,获取字典。
第二种方式:运用递归进行处理,将传入字符串按每次两个字符缩减成新的字符串进行递归,并对需要处理的字符串逐个按照字典的键值对进行replaceAll操作。
//用尾递归做字典选择器,将请求里面用于字典选择的字符串按照两个字符代表一个字典进行使用
@scala.annotation.tailrec
def dicManager(dicListString: String, inString: StringBuilder): String = {
if (dicListString.equals("")) {
return inString.toString()
} else {
//选择字典
val dicPathKey = dicListString.substring(0, 2)
val dictionaryManager = new Properties()
val dicManagerFile = new BufferedInputStream(new FileInputStream("dic_manager.properties"))
dictionaryManager.load(dicManagerFile)
//加载字典
val dictionary = new Properties()
// println(dictionaryManager.getProperty(dicKey))
val dicPath = dictionaryManager.getProperty(dicPathKey)
val dictionaryFile = new BufferedInputStream(new FileInputStream(dicPath))
dictionary.load(dictionaryFile)
dicManagerFile.close()
val dicList = dictionary.stringPropertyNames().toArray
for (key <- dicList) {
//println(key)
val tempString = inString.toString().replaceAll(key.toString, dictionary.getProperty(key.toString))
inString.delete(0,inString.size)
inString.append(tempString)
println(inString)
}
dicManagerFile.close()
return dicManager(dicListString.drop(2), inString)
}
}
因为之前用惯了Java,还没能适应scala的代码风格,看上去比较难看。
因为字符串在每次处理完之后需要保存新的值,所以使用了StringBuider,目前放在properties文件里进行字典配置,后如果专有名词字典过大或者需要前台配置,考虑使用数据库
dic_manager.properties:
A1=dicA.properties
B1=dicB.properties
dicA.properties:
张三=Zhangsaner
好叻=While
dicB.properties
麻溜地=be quickly
dicListString=“A1B1”
inString=“张三,麻溜地!”“好叻~!”
out:"Zhangsaner,be quickly!""While~!"