Android开发:Java中CharSequence转Int及解决NumberFormatException问题
解决输入框金额转整数时的NumberFormatException崩溃问题
针对你遇到的输入为空时触发NumberFormatException导致崩溃的问题,这里提供两种可靠的解决思路,直接上代码和说明:
1. 先校验输入合法性 + 异常捕获(直观写法)
先过滤空输入和全空格的情况,再通过try-catch包裹转换逻辑,彻底避免崩溃:
CharSequence inputContent = edt_nma_amount.getText(); // 先排除空输入和仅含空格的无效输入 if (!TextUtils.isEmpty(inputContent) && inputContent.toString().trim().length() > 0) { try { int amount = Integer.parseInt(inputContent.toString().trim()); // 根据金额判断是否显示理由框 tilNmaReason.setVisibility(amount >= 100 ? View.VISIBLE : View.GONE); } catch (NumberFormatException e) { // 输入不是有效整数(比如字母、小数、特殊字符),隐藏理由框 tilNmaReason.setVisibility(View.GONE); } } else { // 输入为空或全空格,隐藏理由框 tilNmaReason.setVisibility(View.GONE); }
2. 封装安全转换工具方法(复用性更强)
把字符串转整数的逻辑封装成工具方法,统一处理空值和异常,让业务代码更简洁:
// 工具方法:安全将字符串转为整数,失败时返回指定默认值 private int safeParseInt(String inputStr, int defaultValue) { if (inputStr == null || inputStr.trim().isEmpty()) { return defaultValue; } try { return Integer.parseInt(inputStr.trim()); } catch (NumberFormatException e) { return defaultValue; } } // 使用示例 String inputStr = edt_nma_amount.getText().toString(); int amount = safeParseInt(inputStr, 0); tilNmaReason.setVisibility(amount >= 100 ? View.VISIBLE : View.GONE);
关键注意点
- 必须调用
trim():处理用户仅输入空格的情况,避免把全空格字符串误判为有效输入 - 异常捕获覆盖所有无效场景:除了空字符串,用户输入字母、小数、特殊字符都会触发
NumberFormatException,必须捕获 - 默认状态符合业务逻辑:当输入不合法时,默认隐藏理由框,避免不符合要求的输入触发错误显示
内容的提问来源于stack exchange,提问作者marivic valdehueza
相关产品推荐
相关产品推荐

