You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala字符处理问题:判断非数字字符及驼峰转下划线大写格式

Scala相关问题解答

我来帮你解决这两个Scala问题哈:

1. 判断字符不是数字的方法

有几种简洁实用的方式:

  • 最直接的是用字符的isDigit方法取反:!x.isDigit,这也是推荐的写法。示例:
    val charA = 'a'
    println(!charA.isDigit) // 输出 true
    val char5 = '5'
    println(!char5.isDigit) // 输出 false
    
  • 也可以通过字符范围判断,数字字符的区间是'0'到'9',所以可以写:x < '0' || x > '9'
  • 用模式匹配实现的话:
    def isNotDigit(c: Char): Boolean = c match {
      case digit if digit >= '0' && digit <= '9' => false
      case _ => true
    }
    

2. 修正字符串转换的问题

你原来的代码问题出在判断条件x == x.toUpper上——数字、符号这类字符的toUpper结果就是自身,所以会被误判成大写字母,导致前面被加上下划线,比如处理"filler51"时会变成FILLER_5_1,这显然不符合预期。

我们需要把判断逻辑改成仅当字符是大写字母时才添加下划线,也就是用x.isUpper方法来判断,而不是用x == x.toUpper。修正后的代码如下:

"accountNumber".map {
  case x if x.isUpper => "_" + x
  case x => x.toUpper
}.mkString
// 输出: ACCOUNT_NUMBER

"filler51".map {
  case x if x.isUpper => "_" + x
  case x => x.toUpper
}.mkString
// 输出: FILLER51,符合预期

如果你的需求里希望数字保持原样(其实数字toUpper后还是自身,上面的代码已经满足),如果有其他特殊字符需要单独处理,也可以在模式匹配里添加对应的case分支。

内容的提问来源于stack exchange,提问作者stack0114106

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:33:48