Java 如何在Scala中提取字符串的最后一个元音及其后面的任何单词?
给定下面的映射(“菱形”->“DAYMAHND”,“千”->“THAWZAHND”),我想获取当前映射中每个项目的值,并在新映射中更新这些值,最后一个元音和后面的每一个单词作为值,同一个单词作为键。在Scala我该怎么做?我听说有人使用.stripSuffix()来实现这一点。(地图是不可变的) 输入:地图(“钻石”->“DAYMAHND”,“千”->“THAWZAHND”) 输出:地图(“钻石”->“AHND”,“千”->“AHND”) 我的尝试:Java 如何在Scala中提取字符串的最后一个元音及其后面的任何单词?,java,string,scala,dictionary,Java,String,Scala,Dictionary,给定下面的映射(“菱形”->“DAYMAHND”,“千”->“THAWZAHND”),我想获取当前映射中每个项目的值,并在新映射中更新这些值,最后一个元音和后面的每一个单词作为值,同一个单词作为键。在Scala我该怎么做?我听说有人使用.stripSuffix()来实现这一点。(地图是不可变的) 输入:地图(“钻石”->“DAYMAHND”,“千”->“THAWZAHND”) 输出:地图(“钻石”->“AHND”,“千”->“AHND”) 我的尝试: val table1 = Map("DIAM
val table1 = Map("DIAMOND" -> "DAYMAHND", "THOUSAND" -> "THAWZAHND")
val table2 = table1.map { case (key, value) =>
val string_2 = value
.reverse
.takeWhile("AEIOU".indexOf(_) ==
-1)
(key, string_2 + value.charAt(value.length
- 1 - string_2.length))
}
.toMap
正则表达式可能是最好的方法。这是最简单的方法
table1.mapValues(_.split("(?=[AEIUO])").last)
但是,mapValues
将在每次读取地图时重新计算此表达式,因此如果要多次使用地图,请执行以下操作:
table1.map{case (k, v) => k -> v.split("(?=[AEIUO])").last}
您可以使用
ms mapValues f
。请参阅:@FlorianBaierl小心使用mapValues
,如果f
是一个昂贵的函数,它可能会严重影响性能。
table1.map{case (k, v) => k -> v.split("(?=[AEIUO])").last}