java运行时字符串中下划线非法,需预清洗;正负号需trim后解析;大数防溢出应先用biginteger再exact转换;浮点解析后须校验isfinite,金额场景优先用bigdecimal。

Java中不能直接解析含下划线的字符串为基本类型——下划线是Java字面量语法特性,仅在编译期有效,运行时字符串里的下划线属于非法字符。例如 "123_456" 或 "-1_000" 传给 Integer.parseInt() 会直接抛 NumberFormatException。正负号则不同:它被标准解析方法原生支持(如 "-42"、"+7" 合法),但需注意预处理与校验。
正号和负号:可直接支持,但必须先 trim 且防空
所有 parseXxx() 方法都接受可选的前导 '+' 或 '-',但不接受中间或末尾符号,也不接受多个符号(如 "--5" 或 "5+")。安全做法是:
- 调用
s == null || s.trim().isEmpty()排除空/空白输入 - 使用
s.trim()去首尾空格,避免" -42 "解析失败 - 再进
try-catch,不依赖默认值逻辑
下划线:运行时字符串中不合法,必须预清洗
Java源码中允许 int x = 1_000_000; 是编译器层面的语法糖,String 对象中的下划线不会被任何 JDK 解析方法识别。若用户输入含下划线(如财务格式 "12_345.67" 或二进制 "1101_0010"),必须手动移除:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用
s.replace("_", "")简单清除(适用于确定只含数字、符号、下划线的场景) - 更稳妥方式:用正则
s.replaceAll("[^\d+-eE.]", "")清除非数字、非符号、非小数点、非科学计数符的字符(注意保留e/E和小数点) - 清洗后务必再次校验是否为空或只剩符号,防止
"___"变成""或"-"
整数解析:防溢出比防格式更重要
即使字符串清洗后形如 "12345678901234567890",Long.parseLong() 仍会因超出 long 范围而抛异常。推荐路径:
- 先用
new BigInteger(s)加载(它不溢出) - 再调
bigInt.intValueExact()或longValueExact()—— 异常即说明目标类型装不下 - 对
byte/short,同样用bigInt.byteValueExact()等精确方法校验
浮点与特殊值:NaN 和 Infinity 需业务判定
Double.parseDouble("NaN") 返回 Double.NaN,不抛异常;"Infinity" 同理。若业务不允许这些值:
- 解析后立即检查:
Double.isFinite(d)(排除 NaN、±Infinity) - 精度敏感场景(如金额),跳过
double,改用new BigDecimal(s)构造,它能准确表示任意十进制小数 - 避免
BigDecimal→double的反向强转,new BigDecimal("0.1").doubleValue() != 0.1
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










