如何在Scala中获取字符串的最后一个元音及其后的任何单词?

时间:2019-02-14 07:39:14

标签: java string scala dictionary

给出以下地图(“ DIAMOND”->“ DAYMAHND”,“ THOUSAND”->“ THAWZAHND”),我想获取当前地图中每个项目的值,并使用最后一个元音和其后的每个其他字作为值,并且与键相同。我将如何在Scala中做到这一点?我听说有人通过使用.stripSuffix()完成此操作。 (地图是一成不变的)

输入:Map(“ DIAMOND”->“ DAYMAHND”,“ THOUSAND”->“ THAWZAHND”)

输出:Map(“ DIAMOND”->“ AHND”,“ THOUSAND”->“ AHND”)

我的尝试:

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

2 个答案:

答案 0 :(得分:2)

table1.mapValues(w => w.drop(w.lastIndexWhere("AEIOU".contains(_))))

答案 1 :(得分:0)

正则表达式可能是最好的方法。这是最简单的方法

table1.mapValues(_.split("(?=[AEIUO])").last)

不过,mapValues每次阅读地图都会重新计算此表达式,因此,如果您要多次使用地图,请执行以下操作:

table1.map{case (k, v) => k -> v.split("(?=[AEIUO])").last}