当前位置: 代码迷 >> java >> 如何在Scala中获取字符串的最后一个元音及其后的任何单词?
  详细解决方案

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

热度:64   发布时间:2023-07-31 13:45:44.0

给定下面的Map(“ 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
table1.mapValues(w => w.drop(w.lastIndexWhere("AEIOU".contains(_))))

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

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

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

table1.map{case (k, v) => k -> v.split("(?=[AEIUO])").last}
  相关解决方案