杰瑞科技汇

Java String转int有哪些方法?

最常用和推荐的方法:Integer.parseInt()

这是将字符串转换为基本数据类型 int 的标准方法,它会尝试将字符串的内容解析为一个有符号的十进制整数。

Java String转int有哪些方法?-图1
(图片来源网络,侵删)

语法

public static int parseInt(String s) throws NumberFormatException

特点

  • 返回值:基本数据类型 int
  • 异常处理:如果字符串不是有效的整数格式(包含非数字字符、为空、超出 int 范围等),它会抛出 NumberFormatException 异常,在使用时通常需要配合 try-catch 语句。

示例代码

public class StringToIntExample {
    public static void main(String[] args) {
        String str1 = "123";
        String str2 = "-456";
        String str3 = "789abc"; // 无效格式
        String str4 = "";      // 空字符串
        String str5 = "2147483648"; // 超出 int 范围
        // 成功转换的例子
        int num1 = Integer.parseInt(str1);
        System.out.println("字符串 '" + str1 + "' 转换为 int: " + num1);
        int num2 = Integer.parseInt(str2);
        System.out.println("字符串 '" + str2 + "' 转换为 int: " + num2);
        // 处理可能出现的异常
        try {
            // 尝试转换一个无效的字符串
            int num3 = Integer.parseInt(str3);
            System.out.println(num3);
        } catch (NumberFormatException e) {
            System.out.println("错误: 无法将 '" + str3 + "' 转换为整数。");
        }
        try {
            // 尝试转换一个空字符串
            int num4 = Integer.parseInt(str4);
            System.out.println(num4);
        } catch (NumberFormatException e) {
            System.out.println("错误: 无法将空字符串转换为整数。");
        }
        try {
            // 尝试转换一个超出范围的数字
            int num5 = Integer.parseInt(str5);
            System.out.println(num5);
        } catch (NumberFormatException e) {
            System.out.println("错误: 数字 '" + str5 + "' 超出 int 类型的范围。");
        }
    }
}

输出结果:

字符串 '123' 转换为 int: 123
字符串 '-456' 转换为 int: -456
错误: 无法将 '789abc' 转换为整数。
错误: 无法将空字符串转换为整数。
错误: 数字 '2147483648' 超出 int 类型的范围。

处理 NumberFormatException 的最佳实践

在实际开发中,你几乎总是需要处理 NumberFormatException,一个健壮的转换函数应该包含这个逻辑。

public static int safeStringToInt(String str, int defaultValue) {
    if (str == null || str.trim().isEmpty()) {
        return defaultValue; // 如果字符串为空或null,返回一个默认值
    }
    try {
        return Integer.parseInt(str.trim());
    } catch (NumberFormatException e) {
        return defaultValue; // 如果转换失败,返回一个默认值
    }
}
public static void main(String[] args) {
    String validNumber = "101";
    String invalidNumber = "hello";
    String nullString = null;
    String emptyString = "";
    System.out.println("safeStringToInt('" + validNumber + "') = " + safeStringToInt(validNumber, -1));
    System.out.println("safeStringToInt('" + invalidNumber + "') = " + safeStringToInt(invalidNumber, -1));
    System.out.println("safeStringToInt(" + nullString + ") = " + safeStringToInt(nullString, -1));
    System.out.println("safeStringToInt('" + emptyString + "') = " + safeStringToInt(emptyString, -1));
}

输出结果:

safeStringToInt('101') = 101
safeStringToInt('hello') = -1
safeStringToInt(null) = -1
safeStringToInt('') = -1

其他方法

Integer.valueOf()

这个方法也可以将字符串转换为 int,但它有一个关键区别。

Java String转int有哪些方法?-图2
(图片来源网络,侵删)

语法

public static Integer valueOf(String s) throws NumberFormatException

特点

  • 返回值Integer 对象(即 int 的包装类型),而不是基本类型 int
  • 性能:由于它会返回一个 Integer 对象,所以涉及到自动装箱(Autoboxing),在需要 int 的地方,JVM 会自动将其转换为 int
  • 缓存Integer.valueOf() 会利用 Integer 的缓存机制(在 -128127 的范围内),返回一个预先创建好的对象,这比 new Integer() 更高效,但对于 parseInt(),它直接返回基本类型,没有对象创建的开销。

何时使用?

  • 当你需要一个 Integer 对象时(在泛型集合 List<Integer> 中)。
  • 当你不关心性能差异(对于大多数应用来说,parseIntvalueOf 的性能差异可以忽略不计)时。

示例

String str = "100";
// 使用 parseInt(),得到基本类型 int
int primitiveInt = Integer.parseInt(str);
System.out.println(primitiveInt); // 输出: 100
System.out.println(primitiveInt.getClass().getName()); // 输出: int
// 使用 valueOf(),得到 Integer 对象
Integer integerObject = Integer.valueOf(str);
System.out.println(integerObject); // 输出: 100
System.out.println(integerObject.getClass().getName()); // 输出: java.lang.Integer

处理非十进制进制(如二进制、十六进制)

如果字符串是其他进制表示的数字,你需要告诉 parseInt 使用哪个基数(radix)。

语法

public static int parseInt(String s, int radix) throws NumberFormatException
  • radix 是进制,范围在 Character.MIN_RADIX (2) 到 Character.MAX_RADIX (36) 之间。
  • radix 为 10,可以省略,效果与 parseInt(String s) 相同。

示例

public class StringToIntRadixExample {
    public static void main(String[] args) {
        // 十六进制 (Hexadecimal)
        String hexStr = "FF";
        int hexValue = Integer.parseInt(hexStr, 16);
        System.out.println("十六进制 '" + hexStr + "' 转换为十进制: " + hexValue); // 输出: 255
        // 二进制 (Binary)
        String binStr = "1010";
        int binValue = Integer.parseInt(binStr, 2);
        System.out.println("二进制 '" + binStr + "' 转换为十进制: " + binValue); // 输出: 10
        // 八进制 (Octal)
        String octStr = "20";
        int octValue = Integer.parseInt(octStr, 8);
        System.out.println("八进制 '" + octStr + "' 转换为十进制: " + octValue); // 输出: 16
    }
}

总结与最佳实践

方法 返回类型 是否抛出异常 适用场景
Integer.parseInt(String s) int (基本类型) (NumberFormatException) 首选,当你明确需要一个基本类型 int 时,性能最好。
Integer.valueOf(String s) Integer (对象) (NumberFormatException) 当你需要一个 Integer 对象时(用于泛型集合)。
Integer.parseInt(String s, int radix) int (基本类型) (NumberFormatException)) 当你需要解析非十进制(如二进制、十六进制)的字符串时。

核心建议:

  1. 默认使用 Integer.parseInt():在绝大多数情况下,这是最直接、最高效的选择。
  2. 总是处理异常:使用 try-catch 块来捕获 NumberFormatException,或者像上面示例中那样编写一个安全的辅助方法,以防止程序因无效输入而崩溃。
  3. 明确返回类型:如果你需要一个对象(存入 List),则使用 Integer.valueOf(),如果你需要一个原始数值用于计算,则使用 Integer.parseInt()
Java String转int有哪些方法?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇