Scala字符串模式匹配优化:移除if语句实现类型判定
嘿,这个优化需求很赞!Scala的模式匹配本来就擅长做这种规则判定,完全可以丢掉那些if守卫,用纯模式匹配来实现。
这里有两种简洁的写法,都能达到你的要求:
写法一:直接内嵌正则表达式
这种方式最直观,把匹配规则直接写在case分支里:
def dataType(input: String): String = input match { case """Q.*""" => "StringType" case """8[^F]*""" => "IntegerType" case """8.*F.*""" => "FloatType" case _ => "UnknowType" }
写法二:提取正则为单独变量(可读性更佳)
如果规则更复杂,或者你希望复用这些正则,把它们提取成私有变量会让代码更清晰:
def dataType(input: String): String = input match { case QPattern() => "StringType" case IntegerPattern() => "IntegerType" case FloatPattern() => "FloatType" case _ => "UnknowType" } private val QPattern = """Q.*""".r private val IntegerPattern = """8[^F]*""".r private val FloatPattern = """8.*F.*""".r
逻辑对应说明
每个正则模式完美对应你原来的规则:
"""Q.*""":匹配所有以Q开头的字符串,对应原逻辑的input.startsWith("Q")"""8[^F]*""":匹配以8开头且后续字符中完全不含F的字符串,对应input.startsWith("8") && !(input.contains("F"))"""8.*F.*""":匹配以8开头且包含至少一个F的字符串,对应input.startsWith("8") && input.contains("F")
这种写法完全依赖Scala的正则模式匹配特性,没有任何if语句,代码更符合函数式风格,可读性也更强。
内容的提问来源于stack exchange,提问作者user9683185
相关产品推荐
相关产品推荐

