Java 怎么把字符串转成数字?附 3 种方法及常见报错

编程狮(w3cschool.cn) 2026-08-07 16:10:00 浏览数 (13)
反馈

想把 Java 里的字符串变成数字参与运算,最常用的是 Integer.parseInt,它把像 123 这样的字符串转成 int;带小数就用 Double.parseDouble。你从输入框拿到一段文本、或者接口返回的是字符串格式的数字,直接拿去加减就会出错,因为字符串是文本、数字是数值,两者不是一回事。

本文基于 Java 17 验证,分别演示 Integer.parseInt、Integer.valueOf、Double.parseDouble 三种把字符串转成数字的做法,并讲清最常见的 NumberFormatException 为什么会出现、怎么兜底。看完你不仅能转成功,还能在报错时立刻定位原因。今天这篇文章,编程狮就把这块讲透。

一、先弄明白:为什么字符串不能直接当数字算

字符串转数字,本质是把一段「看起来像数字的文本」变成真正能参与加减乘除的数值。比如变量里装的是 "123",它本质是三个字符:'1'、'2'、'3',不是数值一百二十三。所以 "123" + 1 在 Java 里得到的是 "1231" 这种拼接结果,而不是 124。

在 Java 这种强类型语言里,不同类型之间不能随便混用,这种把一种类型变成另一种类型的动作就叫类型转换。字符串转数字,是类型转换里最常见的一种:你把文本形态的数字,换成数值形态,程序才认得它参与运算。也正因如此,拿到字符串数字的第一反应不应该是直接运算,而是先做一次字符串转数字。

一个贴近生活的比喻:字符串像写在纸上的「壹佰贰拾叁」四个字,数字是你钱包里真正的 123 块钱。你想算账,得先把纸上的字换成真钱,字符串转数字干的就是这个「兑换」动作。

💡 小提示:如果还不熟悉 Java 里的数据类型,可以先过一遍 Java 教程 里的基础章节,把 int、double 和 String 的关系理顺,后面三种方法才好理解。

二、方法一:Integer.parseInt(转整数最常用)

Integer.parseInt 是字符串转整数最常用的做法。你给它一个纯整数字符串,它返回一个 int 类型的数值,之后就能正常加减了。

public class Main {
    public static void main(String[] args) {
        String s = "123";
        int n = Integer.parseInt(s);
        System.out.println(n + 1);   // 124
    }
}

上面这段做的是:把字符串 "123" 交给 Integer.parseInt,它返回一个 int 赋值给 n;下面 n + 1 就是真正的数值加法,输出 124。常用写法记不住的话,Java 速查手册 可以常备在旁边翻。

除了基础用法,parseInt 还有第二个参数叫进制 radix。比如 Integer.parseInt("10", 2) 是把 "10" 当成二进制来读,得到十进制的 2;字符串以 0x 开头时也可以写成 Integer.parseInt("0x10", 16)。日常不写第二个参数时,默认按十进制处理,绝大多数场景已经够用。

需要注意,parseInt 只认整数。如果你传 "12.5" 或 "abc",它会直接抛出异常——这一点正是下一节要讲的常见报错来源。

三、方法二:Integer.valueOf 与 Double.parseDouble

Integer.valueOf 和 parseInt 很像,区别是它返回的是 Integer 对象(会自动装箱),日常运算里用起来几乎没差别:

String s = "123";
Integer n = Integer.valueOf(s);
System.out.println(n + 1);   // 124

如果字符串里带小数点,就得用 Double.parseDouble,它负责把 "3.14" 这样的文本转成 double:

String s = "3.14";
double d = Double.parseDouble(s);
System.out.println(d * 2);   // 6.28

上面这段做的是:把带小数的字符串交给 Double.parseDouble,得到一个真正的浮点数,之后乘 2 得到 6.28。除了 double,还有 Float.parseFloat 处理单精度浮点,区别只是精度,日常用 double 就够了。

顺带一提,parseDouble 也能吃整数,比如 "123" 转完得到 123.0——类型转换是自由的,只是结果带上了小数点。选 Integer.parseInt 还是 Double.parseDouble,核心看你的字符串里有没有小数点,而不是看你想不想要小数。

四、三种方法怎么选,以及常见报错

把三种写法摆在一起,选择就很清楚了:

方法 适用场景 返回类型 注意点
Integer.parseInt 纯整数 int 只认整数,遇小数或字母报错
Integer.valueOf 纯整数,需要对象 Integer 与 parseInt 运算时无差别
Double.parseDouble 带小数 double 整数也能转,但得到浮点值

最常踩的坑是 NumberFormatException。它会在三种情况下出现:字符串里有字母("abc")、混了小数点却用了 parseInt("12.5")、或者字符串是空的("")。本质上都是「文本里包含了不能当成数字读的内容」。

try {
    int n = Integer.parseInt("abc");
} catch (NumberFormatException e) {
    System.out.println("不是合法整数:" + e.getMessage());
}

上面这段做的是:把可能出错的转换放进 try 里,一旦格式不对就跳到 catch,程序不会崩,而是打印一句友好的提示。关于这类异常的来龙去脉,编程词典 里有更系统的对照。

还有一个隐蔽情况:字符串前后带了空格,比如 " 123 "。Java 不会自动忽略空格,所以同样会抛出 NumberFormatException。处理用户输入时,在做字符串转数字之前先调用一次 trim() 去掉两端空白,能避开一大半这类报错。

⚠️ 注意:空字符串 "" 和前后带空格的 " 123 " 都会触发 NumberFormatException。空格问题可以先调用 s.trim() 去掉两端空白再转换;空串则需要先判断长度再决定是否转换。

另外,从网页表单或配置文件读到的数字几乎都是字符串,所以字符串转数字在真实项目里出现频率极高,值得一开始就把转换和异常处理连在一起练熟。

总结

把 Java 里的字符串变成数字,本质是做一次类型转换:把文本形态的数字兑换成数值。纯整数用 Integer.parseInt、需要对象用 Integer.valueOf、带小数用 Double.parseDouble;只要字符串里混了非数字内容,就会抛出 NumberFormatException,用 try-catch 兜底最稳妥。熟练之后,字符串转数字会成为你写 Java 时几乎每天都会用到的动作。

要点带走:

  • parseInt 转整数、parseDouble 转小数,别混用;
  • NumberFormatException 多因字母、小数点或空串引起;
  • 不确定来源是否干净时,用 try-catch 包住转换。

下一步,把 Java 的异常处理和常用数据类型一起学扎实,写出的代码才更稳。

延伸学习

想把 Java 基础系统补齐,可以按这个顺序来:

  1. 想系统学 Java,Java 开发方向 整理了从入门到进阶的学习路径;
  2. 想边学边练,编程课程 里有配套实战可以上手。

常见问题

Q:转出来的是 int 还是 Integer,有什么区别?
A:parseInt 返回基本类型 int,valueOf 返回 Integer 对象。日常加减法两者没差别,只有当你需要把数字放进只能装对象的集合时才在意这个区别。

Q:字符串里带了空格为什么也会报错?
A:NumberFormatException 不认空格。" 123 " 两端有空格不算合法整数,先用 trim() 去掉空白再转换就能解决。

Q:空字符串转换成数字会得到什么?
A:会直接抛出 NumberFormatException,不会得到 0。所以转换前最好先判断字符串是否为空,或干脆用 try-catch 接住异常。

0 人点赞