繁体   English   中英

字符串Scala中的模式匹配

[英]pattern matching in String Scala

我在上面的代码中编写了一些规则来定义String的类型。

def dataType (input:String) : String = input match {
  case input if input.startsWith("Q")   => "StringType";
  case input if (input.startsWith("8") && !(input.contains("F"))) => "IntegerType"
  case input if (input.startsWith("8") && (input.contains("F"))) => "FloatType"
  case _                             => "UnknowType";
}

这段代码很好用,但是我想通过避免使用If来优化它。 我希望它仅基于模式匹配而不使用if语句。 我试图以这种方式修改它,但结果却很糟糕:

def dataType (input:String) : String = input match {
  case "startsWith('Q')"  => "StringType"
  case "startsWith('8') && !(contains('F')))" => "IntegerType"
  case "startsWith('8') && (contains('F')))" => "FloatType"
  case _                             => "UnknowType";
}

它总是给我UnknownType结果

任何对此的帮助

最好的祝福

由于要检查包含F的首字母和布尔值 ,因此可以创建这些情况的Tuple2[Char, Boolean]并在match case使用它,如下所示

def dataType (input:String) : String = (input.charAt(0), input.contains('F')) match {

  case ('8', true) => "FloatType"
  case ('Q', _)  => "StringType"
  case ('8', false) => "IntegerType"
  case _ => "UnknowType"
}

而且你应该没事

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM