Scala程序用字符串中的字母顺序替换单词

时间:2017-10-23 01:20:58

标签: scala

我正在学习Scala并且一直在尝试创建一个程序,该程序应该按字母顺序用字符串替换每个单词中的字符。例如,字符串是"你在哪里"因此,程序应该将其改为" Eehrw aer ouy"。我用Google搜索并找到了一些示例,但我无法编写无错误的程序。我想我还远没有工作计划。

def main(args:Array[String]){
    val r = "Where are you"
    val newstr = r.map(x=>(x,_) match {
      case ' ' =   ' '
      case y =>  {
        val newchar = (x.toByte).toChar
        if newchar.toByte.toChar > (newchar + 1).toByte.toChar
        x = newchar
        else
        x
      }
   })
     }

3 个答案:

答案 0 :(得分:2)

棘手的部分是恢复原始资本化。添加标点符号,这将成为一个有趣的小挑战。

val str = "Where, aRe yoU?"
val sortedLowerCase = str.toLowerCase.split("(?=\\W)").map(_.sorted).mkString
val capsAt = str.indices.filter(str(_).isUpper)
capsAt.foldLeft(sortedLowerCase)((s,x) => s.patch(x,Seq(s(x).toUpper),1))
// res0: String = Eehrw, aEr ouY?

学习Standard Library所花费的时间将得到丰厚的回报。

答案 1 :(得分:1)

r.split(" ").map(word => word.toLowerCase.sorted)

要保留大写字母而不是.toLowerCase.sorted,请使用.sortWith并根据您对字符排序的方式实现排序比较功能。

答案 2 :(得分:1)

让我扩展一下Ren的答案:

基于小写进行比较,然后仅在大写字母

时才大写
r.split(" ").map(word => word.sortWith(_.toLower < _.toLower))
  .map(x => if (x.exists(_.isUpper)) x.toLowerCase.capitalize else x )