【Java】字符串转换为数字:Integer的parseInt方法

Java官方文档[1]的解释

public static int parseInt​(String s) throws NumberFormatException
Parses the string argument as a signed decimal integer. The characters in the string must all be
decimal digits, except that the first character may be an ASCII minus sign ‘-’ (’\u002D’) to indicate
a negative value or an ASCII plus sign ‘+’ (’\u002B’) to indicate a positive value. The resulting
integer value is returned, exactly as if the argument and the radix 10 were given as arguments to
the parseInt(java.lang.String, int) method.
_
Parameters:
s - a String containing the int representation to be parsed
Returns:
the integer value represented by the argument in decimal.
Throws:
NumberFormatException - if the string does not contain a parsable integer.

中文翻译

我来简单翻译一部分。

对于Integer类的静态方法public static int parseInt​(String s) throws NumberFormatException
它能够将String类型的参数,解析为一个带符号的十进制整数。字符串中的字符,必须是十进制数字,在这个十进制数字的第一个字符前,可以是ASCII字符的-或Unicode字符的'\u002D来表明这是一个负值,或者是一个ASCII字符的+或Unicode字符的'\u002B来表明这是一个正值。这个作为结果的整数值会被return,如果使用方法parseInt(java.lang.String, int)并为其传参(String s,10)也能达到和当前方法一样的效果。

  • 参数:
    • s: 一个要被解析的字符串,这个字符串看起来是一个整数
  • 返回值:
    • 一个整数值,它由十进制数字表示
  • 异常抛出:
    • NumberFormatException:如果字符串没有包含可以被解析的整数

极简解释 & 应用

简而言之,我们就是要将String类型的整数转化成int类型的整数。

字符串只允许出现十进制数字、正号(+)和负号(-),当然,如果是Unicode编码也可以,一般不会这样用。

我们先来列举一些正确的例子,如:

  1. "100"–>100
  2. "-100"–>-100
  3. "+200"–>200

示例代码:

String s = "100";
int sToInt = Integer.parseInt(s);

但是,如果字符串出现了其他符号,就会抛出NumberFormatException

例如:

  1. "1.1"
  2. "abc"
  3. "&%#"

我们需要捕获并且处理这个异常,给出一个示例代码。

public class TestSubmitException {

    public static void main(String[] args) {
        String[] salesOrders = {"1111", "28120821", "-111", "+1111", "1.11", "abc"};
        submitOrders(salesOrders);
    }

    public static void submitOrders(String[] salesOrders) {
        int[] salesOrdersInteger = new int[salesOrders.length];
        try {
            int i = 0;
            for (String s : salesOrders) {
                salesOrdersInteger[i] = Integer.parseInt(s);
                i++;
            }
        } catch (NumberFormatException e) { 
            e.printStackTrace();
        }

        for (int a : salesOrdersInteger) {
            System.out.println(a);
        }
    }
}

运行结果是
在这里插入图片描述

java.lang.NumberFormatException: For input string: "1.11"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.base/java.lang.Integer.parseInt(Integer.java:652)
	at java.base/java.lang.Integer.parseInt(Integer.java:770)
	at testCode.TestSubmitException.submitOrders(TestSubmitException.java:35)
	at testCode.TestSubmitException.main(TestSubmitException.java:21)
1111
28120821
-111
1111
0
0

Process finished with exit code 0

我们可以看到最后Process finished with exit code 0,说明程序,成功处理了异常并且正常退出了。

参考资料

[1] Java11官方文档 Integer.parseInt(String s)

### 回答1: 如果使用 `Integer.parseInt()` 方法进行字符串转整数操作时,如果字符串的长度过长,超出了 `int` 类型的取值范围,就会导致转换失败。此时,可以使用 `Long.parseLong()` 方法字符串转换为 `long` 类型,或者使用 `BigInteger` 类型来处理大整数。 例如,下面的代码演示了如何使用 `BigInteger` 类型来进行字符串转整数操作: ``` String str = "12345678901234567890"; BigInteger bigInt = new BigInteger(str); System.out.println(bigInt); ``` 输出结果为: ``` 12345678901234567890 ``` ### 回答2: 整数类型的parseInt方法是用于将字符串转换为整数的方法。长度不够可能指的是字符串的长度超过了整数类型的取值范围。在Java中,整数类型的取值范围为-2147483648到2147483647,超过这个范围的字符串无法通过parseInt方法转换为整数。 例如,对于字符串"12345678901234567890",它的长度为20,超过了整数类型的取值范围。如果我们尝试使用parseInt方法进行转换,会抛出NumberFormatException异常,提示整数解析错误。 为了解决这个问题,我们可以使用更大范围的整数类型,如长整型(long)或者BigInteger类。对于超过整数类型范围的字符串,我们可以使用Long.parseLong方法将其转换为长整型,或者使用BigInteger类来进行转换。 示例代码如下: ```java String s = "12345678901234567890"; long l = Long.parseLong(s); System.out.println(l); // 输出:12345678901234567890 BigInteger bigInteger = new BigInteger(s); System.out.println(bigInteger); // 输出:12345678901234567890 ``` 通过使用更大范围的整数类型,我们可以解决整数类型parseInt方法长度不够的问题。 ### 回答3: 整数类型的数据在Java中是以int类型来表示的,int类型的取值范围为-2,147,483,648至2,147,483,647,如果超出了这个范围的值进行Integer.parseInt()操作时,就会发生溢出(overflow)的情况,即长度不够。 举个例子,当我们使用Integer.parseInt()转换一个超过int类型范围的数值时,例如: ``` String numberString = "2147483648"; int number = Integer.parseInt(numberString); ``` 由于2147483648超出了int类型的上限,所以会发生溢出。此时,Java会将溢出部分丢弃,最终的结果将成为-2147483648。 同样地,如果将一个负数进行转换,超过了int类型的下限-2,147,483,648,同样会发生溢出。 为了解决这个问题,可以尝试使用其他数据类型,例如long类型,它的取值范围更大,可以表示更大的整数值。或者可以考虑使用BigInteger类型,它可以表示任意大的整数值,但是在性能上可能会有所牺牲。 总之,当使用Integer.parseInt()进行整数转换时,需要注意目标数值是否在int类型的取值范围内,避免长度不够的问题。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XV_

感谢您的认可,我会继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值