scala用尾递归做字典选择工具

用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~!"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值