我需要把元音转换成@&引用;Scala中的符号
这个程序的思想是读入和取出所有元音,并用“@”字符替换它们。输入将随着用户键入“-quit--”而停止,它将返回应用了函数的行。我不知道我包含的函数“lst.map”(“aeiouAEIOU”=>“@”)部分的语法应该是什么。我想我错过了什么我需要把元音转换成@&引用;Scala中的符号,scala,Scala,这个程序的思想是读入和取出所有元音,并用“@”字符替换它们。输入将随着用户键入“-quit--”而停止,它将返回应用了函数的行。我不知道我包含的函数“lst.map”(“aeiouAEIOU”=>“@”)部分的语法应该是什么。我想我错过了什么 import scala.io.StdIn._ def readList: List[String] = { val n = readLine if (n == "--quit--") { return Nil } else {
import scala.io.StdIn._
def readList: List[String] = {
val n = readLine
if (n == "--quit--") {
return Nil
} else {
return n::readList
}
}
def vowelsToAt(lst: List[String]): List[String] = {
lst.map("aeiouAEIOU" => '@')
}
val wordList = readList
println(vowelsToAt(wordList).mkString("\n"))
您可以使用
lst.map(_.map(c => if ("aeiouAEIOU" contains c) '@' else c))
内部的map
通过将元音替换为@
s来逐字符转换字符串,外部的map
将此转换应用于列表的每个元素
表达式“aeiouAEIOU”=>“@”
无效,左侧必须是任意字符(lambda的参数),而不是包含要映射的字符的字符串。另一种可能性与您的方法类似(但有点复杂):
一方面注意:在您的方法
readList
中,您不必使用return
,因为最后一条语句也被解释为返回值。在您提供的示例中:“lst.map(u.map(c=>if(“aeiouAEIOU”包含c)@'else c”)“c”是什么?它是lambda的参数。表达式c=>if(“aeiouAEIOU”包含c)@'else c
属于Char=>Char
类型,因此接受Charc
(您可以选择任何其他名称),如果c
是元音或c
本身,则返回“@”。
list.map(_.map {
case 'a' | 'e' | 'i' | 'o' | 'u' | 'A' | 'E' | 'I' | 'O' | 'U' => '@'
case c => c
})