match (str) { case "String1" => ??? case "String2" => ??? }
这是区分大小写的匹配.如何编写不区分大小写的匹配?我知道我可以调用每个分支的LowerCase,但是我想要更优雅的解决方案.
解决方法
基本方法:
您可以使用模式守卫和正则表达式
str match { case s if s matches "(?i)String1" => 1 case s if s matches "(?i)String2" => 2 case _ => 0 }
复杂的方法:
字符串插值和正则表达式的含义
implicit class CaseInsensitiveRegex(sc: StringContext) { def ci = ( "(?i)" + sc.parts.mkString ).r } def doStringMatch(str: String) = str match { case ci"String1" => 1 case ci"String2" => 2 case _ => 0 }
REPL中的一些示例用法:
scala> doStringMatch("StRINg1") res5: Int = 1 scala> doStringMatch("sTring2") res8: Int = 2