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
相关产品推荐
相关产品推荐

