首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Scala中传递这个大小写规则,以便只接受包含字母的字符串?

如何在Scala中传递这个大小写规则,以便只接受包含字母的字符串?
EN

Stack Overflow用户
提问于 2021-08-04 22:11:36
回答 2查看 67关注 0票数 0

我正在通过Exercism练习学习Scala,但我被Bob练习卡住了。我在倒数第二个案例中的目标是回答哇,冷静点!如果给定的语句有大写字母,但也可以包含除问号以外的任何其他内容。我似乎找不到一种方法来实现这一点,而不与另一条规则相矛盾。我不确定isLetter是否是一个真正的函数,但我的锻炼导师建议我使用它。

代码语言:javascript
复制
object Bob {
  def response(statement: String): String = {
//  println(statement)
  println("k".contains("abcdefghijklmnopqrstuvwxyz".toCharArray))
  statement.trim() match {
    case x if x.isEmpty => "Fine. Be that way!"
    case x if x.matches("^[A-Z0-9][^a-z].+\\?$") => "Calm down, I know what I'm doing!"
    case x if x.matches("^.+\\?$") => "Sure."
    case x if (x.matches ("[A-Z %\\^*@#$(*\\!,)0-9]+") /*&& x.isLetter*/) => "Whoa, chill out!"
    case _ => "Whatever."
  }
  }

}

我遇到麻烦的测试用例:

代码语言:javascript
复制
"1, 2, 3 GO!"
"1, 2, 3"

1,2,3开始!应该是谁,冷静下来。而1,2,3应该是任何值,但总是返回为哇哇冷静下来。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-08-05 06:00:02

从有限的解释来看,我认为“哇……”case应该检查两个条件,

任何地方都不能出现至少1个资本letter.

  • Question标记的

如果这些是你的要求,那么你的“哇……”case可以简单地写成这两个条件的AND。

代码语言:javascript
复制
case x if (x.matches("(.*)([A-Z]+)(.*)") && !x.matches("(.*)(\\?)(.*)")) => "Whoa, chill out!"
票数 0
EN

Stack Overflow用户

发布于 2021-08-05 08:51:59

您可以使用单个模式,并通过正向先行断言char A-Z,然后匹配除问号以外的任何字符。

代码语言:javascript
复制
^(?=[^A-Z]*[A-Z\n])[^?\n]+$

说明

  • ^ string
  • (?=正向先行的开始,断言右侧是
    • [^A-Z\n]*[A-Z]匹配除换行符或A-Z之外的任何字符,然后匹配A-Z

  • ) Close lookahead
  • [^?\n]+ Match End chars a a newline
  • $ End of 1+ ?

(关闭字符串匹配字符串或字符串末尾以外的字符)

Regex demo | Scala demo

例如

代码语言:javascript
复制
object Bob {
  def response(statement: String): String = {
    statement.trim() match {
      case x if x.isEmpty => "Fine. Be that way!"
      case x if x.matches("^[A-Z0-9\\n][^a-z].+\\?$") => "Calm down, I know what I'm doing!"
      case x if x.matches("^.+\\?$") => "Sure."
      case x if x.matches ("^(?=[^A-Z]*[A-Z])[^?\\n]+$") => "Whoa, chill out!"
      case _ => "Whatever."
    }
  }
}

Bob.response("1, 2, 3 GO!")
Bob.response("1, 2, 3")

输出

代码语言:javascript
复制
val res0: String = Whoa, chill out!
val res1: String = Whatever.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68658547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档