尘世壹俗人 2023-03-02 15:48 采纳率: 81.3%
浏览 20
已结题

scala match模式匹配正则 无法生效

遇到个鬼畜事件,scala的字符串模式匹配了一个正则,怎么写都不走对应的分支。脑子都成浆糊了,大家帮我看一些是我写的问题还是什么?

      schema.map(m => {
          val re = """[\u4e00-\u9fa5]+""".r()
          m.name match {
              case re(x) => "有中文"+x
          }
      }).foreach(println(_))

这部分代码本来是打算判断是否有中文,但是怎么写都不走case,本来有个case _,但暂时删掉了,现在不管怎么改都不走正则,甚至报scala.MatchError: XXX (of class java.lang.String)这种鬼畜错误,正则本身就用在字符串上,但现在因为它是String而报错。就很诡异。

  • 写回答

2条回答 默认 最新

  • 编程漫步者 2023-03-02 16:10
    关注

    这段代码中的问题在于,正则表达式匹配成功后没有返回任何值,也就是说,如果匹配成功,这个case语句块将不会有任何输出。另外,还需要将re(x)的值返回出来。

    您可以尝试如下修改代码:

    schema.map(m => {
        val re = """[\u4e00-\u9fa5]+""".r
        m.name match {
            case re(x) => println(s"有中文$x")
            case _ =>
        }
    })
    

    我们在匹配成功时使用println语句输出中文字符串,同时加入一个case _来覆盖所有其他情况。同时,将正则表达式的r()去掉,只保留r。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月3日
  • 创建了问题 3月2日