如何判断一个字符串是否可以被解析为合法的有效整数
Scala判断字符串是否可解析为合法整数的方法
以下是三种常用的实现方案,可根据使用场景选择:
方法1:异常捕获(兼容全版本Scala)
封装方法捕获NumberFormatException异常判断是否解析成功:
def isLegalInt(str: String): Boolean = { try { str.toInt true } catch { case _: NumberFormatException => false } }
调用示例:isLegalInt(s) 返回true,isLegalInt(r) 返回false
方法2:toIntOption 方案(Scala 2.13+ 推荐)
高版本Scala原生提供了带返回值的安全转换方法,无需手动处理异常:
// 解析成功返回Some[Int],失败返回None,直接判断是否非空即可 s.toIntOption.isDefined // 结果为true r.toIntOption.isDefined // 结果为false
该方案更符合函数式编程习惯,避免了异常带来的副作用,是优先推荐的写法。
方法3:正则匹配(仅校验格式场景可选)
如果只需要校验字符串结构符合整数格式,不需要实际转换为数值,可以用正则实现:
// 正则支持匹配带正负号的整数 val intRegex = """^[+-]?\d+$""".r def isIntFormat(str: String): Boolean = intRegex.matches(str)
注意:该方法仅校验格式,无法判断数值是否超出Int的取值范围(比如
"9999999999"正则校验会返回true,但实际无法转换为合法Int),有完整合法性校验需求不推荐使用。
内容的提问来源于stack exchange,提问作者Duncan Haldane
相关产品推荐
相关产品推荐

