Java:字符串(String)类型转成整型(int)的方法

2年前 (2022) 程序员胖胖胖虎阿
399 0 0
在 Java 中,我们可以使用 Integer.parseInt() 或 Integer.valueOf() 将 String 转换为 int。

        Integer.parseInt() – 返回原始整数。
        Integer.valueOf() – 返回一个 Integer 对象。
对于字符串中的位置或负数,转换是相同的
  String number = "-7";

  // result = -7
  int result = Integer.parseInt(number);
  // result2 = -7
  Integer result2 = Integer.valueOf(number);
1.Integer.java
1.1 查阅JDK源码中Integer类,两个方法签名是一样的,都是使用parseInt(s,10)进行转换,但是返回的结果不同
Integer.java

package java.lang;

public final class Integer extends Number
        implements Comparable<Integer>, Constable, ConstantDesc {

        public static Integer valueOf(String s) throws NumberFormatException {
          return Integer.valueOf(parseInt(s, 10));
        }

        public static int parseInt(String s) throws NumberFormatException {
          return parseInt(s,10);
        }

        //...
}
2. 数字格式异常
2.1 如果输入不是有效数字,Integer.parseInt() 和 Integer.valueOf(String) 方法都会抛出 NumberFormatException

  String number = "10AA";
  Integer result = Integer.parseInt(number);

输出:

Terminal

java.lang.NumberFormatException: For input string: "10A"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
	at java.base/java.lang.Integer.parseInt(Integer.java:658)
	at java.base/java.lang.Integer.valueOf(Integer.java:989)
3. Integer.parseInt() – 将字符串转换为整数
3.1 本示例将字符串 999 转换为原始类型 int。
StringExample1.java

package com.mkyong;

public class StringExample1 {

    public static void main(String[] args) {

        String number = "999";

        try {

            int result = Integer.parseInt(number);
            System.out.println(result);

        } catch (NumberFormatException e) {
            System.err.println("Unable to convert input string :" + number + " to int");
        }

    }

}

输出:

Terminal

999

4. Integer.valueOf – 将字符串转换为整数

4.1 本示例将字符串 123 转换为 Integer 对象

StringExample2.java

package com.mkyong;

public class StringExample2 {

    public static void main(String[] args) {

        String number = "123";

        try {

            Integer result = Integer.valueOf(number);
            System.out.println(result);

        } catch (NumberFormatException e) {
            System.err.println("Unable to convert input string :" + number + " to Integer");
        }

    }

}
5. 最佳实践 – isDigit() + Integer.parseInt
最佳做法是检查输入;抛出的 NumberFormatException 代价很高。

5.1 回顾下面的例子,我们使用正则表达式 String.matches("[0-9]*") 来检查输入是否为有效数字。
StringExample3.java

package com.mkyong;

public class StringExample3 {

    public static void main(String[] args) {

        String number = "-100";
        if (isDigit(number)) {
            System.out.println(Integer.parseInt(number));
        } else {
            System.out.println("Please provide a valid digit [0-9]");
        }

    }

    public static boolean isDigit(String input) {

        // null or length < 0, return false.
        if (input == null || input.length() < 0)
            return false;

        // empty, return false
        input = input.trim();
        if ("".equals(input))
            return false;

        if (input.startsWith("-")) {
            // negative number in string, cut the first char
            return input.substring(1).matches("[0-9]*");
        } else {
            // positive number, good, just check
            return input.matches("[0-9]*");
        }

    }

}
6. Java 8
6.1 开发者喜欢Java 8,这个例子尝试使用Java 8 Optional 和Stream 将String 转换为Integer
StringExample4.java

package com.mkyong;

import java.util.Optional;

public class StringExample4 {

    public static void main(String[] args) {

        String number = "10";

        Optional<Integer> result = Optional.ofNullable(number)
                .filter(StringExample3::isDigit)
                .map(Integer::parseInt);

        if (result.isEmpty()) {
            System.out.println("Please provide a valid digit [0-9]");
        } else {
            System.out.println(result.get());
        }

    }

}
版权声明:程序员胖胖胖虎阿 发表于 2022年10月26日 下午5:40。
转载请注明:Java:字符串(String)类型转成整型(int)的方法 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...