如何检查字符串中是否包含字符?

时间:2011-02-20 05:27:56

标签: scala

我想检查字符串是否包含该字符。我正在写一个刽子手代码。 例如,这里是猜测的词:"scala",但它看起来像"_ _ _ _ _"用户。假设用户输入了字母'a',那么它必须看起来像"_ _ a _ a"

def checkGuess(){
if (result.contains(user_input)) {
    val comp = result.toCharArray
    for (i <- comp){
        if (user_input != comp(i))
            comp(i) = '_'
        comp(i)
        }
    val str = comp.toString
    }
}

这是对的吗?

提前谢谢。

4 个答案:

答案 0 :(得分:7)

我不认为这是作业,所以如果是......我可能会后悔回答......

case class HangmanGame(goal: String, guesses: Set[Char] = Set.empty[Char]) {
  override def toString = goal map {c => if (guesses contains c) c else '_'} mkString " "
  val isComplete = goal forall { guesses.contains } 
  def withGuess(c: Char) = copy(guesses = guesses + c)
}

然后

val h = HangmanGame("scala")
h: HangmanGame = _ _ _ _ _

scala> val h1 = h.withGuess('a')
h1: HangmanGame = _ _ a _ a

scala> val h2 = h1.withGuess('l')
h2: HangmanGame = _ _ a l a

scala> val h3 = h2.withGuess('s')
h3: HangmanGame = s _ a l a

scala> val h4 = h3.withGuess('c')
h4: HangmanGame = s c a l a

scala> h4.isComplete
res5: Boolean = true

<强>更新

好的,所以它确实看起来像家庭作业。我想现在这个精灵已经出了瓶子,但是除非你很快加快Scala的速度,否则你很难解释它是如何工作的。

答案 1 :(得分:1)

怎么样:

scala> def checkGuess(str: String, c: Char) = str.replaceAll("[^"+c+"]","_")
checkGuess: (str: String,c: Char)java.lang.String

scala> checkGuess("scala",'a')
res1: java.lang.String = __a_a

scala> def checkGuess2(str: String, C: Char) = str map { case C => C; case _ => '_'}
checkGuess2: (str: String,C: Char)String

scala> checkGuess2("scala",'a')
res2: String = __a_a

答案 2 :(得分:0)

以下是关于你如何写这篇文章的一些评论。使用此语法def checkGuess() { ... }时,函数不会返回任何值,而是返回Unit。

这意味着您仅将其用于副作用(例如在代码块外部设置一些var或打印一些值)。问题是您没有设置任何值或在函数内打印任何内容(无打印,无分配)。

您未在代码段中显示的内容是存储要猜测的字符串,用户输入和要打印的反馈。您可以将前两个作为参数传递,将最后一个作为返回值传递。这使得输入和输出自包含在函数中,并且不会假定您在何处呈现反馈。

def feedback(target:String, guesses:String): String = { 
  // target is the string to guess like "scala"
  // guesses are the letters that have been provided so far, like "ac"
  // last expression should be the feedback to print for instance "_ca_a"
}

然后你可以考虑将函数转换为target中的每个字母_或其自身,具体取决于它是否包含在guesses中。为此,target map { c => expr }如果你知道如何使 expr 返回 c ,如果c在guesses和'_',那么{{1}}将会很好用

答案 3 :(得分:0)

尽可能靠近主要问题(如何检查字符串中是否包含字符?),我所做的就是改变方法,即:

for 循环中,我想做类似some_chr == 't'的事情
我做了以下some_chr.toString == "t",它工作得很好。