我正在学习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
}
})
}
答案 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 )