杰瑞科技汇

string转int java有哪些方法?

使用 Integer.parseInt() (最常用、最推荐)

这是将 String 转换为 int 最直接、最标准的方法,它属于 java.lang.Integer 类的静态方法。

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

语法

int intValue = Integer.parseInt(String str);

特点

  • 功能:将 String 参数解析为一个有符号的十进制整数。
  • 异常String 不是有效的整数表示形式,会抛出 NumberFormatException
  • 空值处理:如果传入 null,会抛出 NullPointerException

代码示例

public class StringToIntExample {
    public static void main(String[] args) {
        // 1. 基本转换
        String str1 = "123";
        int num1 = Integer.parseInt(str1);
        System.out.println("字符串 '" + str1 + "' 转换为整数: " + num1); // 输出: 123
        // 2. 带符号的转换
        String str2 = "-456";
        int num2 = Integer.parseInt(str2);
        System.out.println("字符串 '" + str2 + "' 转换为整数: " + num2); // 输出: -456
        // 3. 包含空格的字符串 (会失败)
        String str3 = "  789  ";
        // Integer.parseInt(str3); // 这行代码会抛出 NumberFormatException
        // 解决方案:先使用 trim() 去除首尾空格
        int num3 = Integer.parseInt(str3.trim());
        System.out.println("字符串 '" + str3 + "' 去除空格后转换为整数: " + num3); // 输出: 789
        // 4. 无效的字符串 (会抛出异常)
        String str4 = "abc123";
        try {
            int num4 = Integer.parseInt(str4);
            System.out.println(num4);
        } catch (NumberFormatException e) {
            System.out.println("错误: 字符串 '" + str4 + "' 不是有效的整数格式。"); // 输出错误信息
        }
        // 5. 处理 null 值 (会抛出异常)
        String str5 = null;
        try {
            int num5 = Integer.parseInt(str5);
            System.out.println(num5);
        } catch (NullPointerException e) {
            System.out.println("错误: 输入的字符串为 null。"); // 输出错误信息
        }
    }
}

使用 Integer.valueOf()

这个方法也可以将 String 转换为 int,但它返回的是一个 Integer 对象(即 int 的包装类型),而不是原始的 int 类型。

语法

Integer integerValue = Integer.valueOf(String str);

特点

  • 功能:将 String 参数解析为一个 Integer 对象。
  • 异常:与 parseInt() 一样,如果格式无效或输入为 null,会抛出 NumberFormatExceptionNullPointerException
  • 返回类型Integer (对象类型)。
  • 性能:由于它会返回一个对象,如果你只需要一个原始的 int 值,parseInt() 的性能会更好,因为它避免了自动拆箱的过程。valueOf() 返回的对象可能会被 Java 的自动装箱机制缓存,从而在某些情况下提高内存效率。

代码示例

public class StringToIntegerObjectExample {
    public static void main(String[] args) {
        String str = "101";
        // 使用 valueOf() 获取 Integer 对象
        Integer integerObj = Integer.valueOf(str);
        System.out.println("使用 valueOf() 获取的 Integer 对象: " + integerObj);
        // 如果你需要 int 值,系统会自动进行“拆箱”
        int num = integerObj;
        System.out.println("自动拆箱后的 int 值: " + num);
        // 也可以直接链式调用
        int num2 = Integer.valueOf(str); // 编译器会自动将 Integer 拆箱为 int
        System.out.println("链式调用后的 int 值: " + num2);
    }
}

如何选择 parseInt()valueOf()

  • 如果你明确需要一个原始的 int 类型,请使用 Integer.parseInt(),这是最清晰、最高效的选择。
  • 如果你需要一个 Integer 对象(用于泛型集合 List<Integer>),请使用 Integer.valueOf()

使用 Scanner.nextInt()

如果你正在从用户输入(如控制台)或文件中读取数据,Scanner 类是一个很好的工具,它可以直接将输入的下一个标记解析为 int

语法

Scanner scanner = new Scanner(System.in);
int intValue = scanner.nextInt();

特点

  • 功能:从扫描器的输入中扫描下一个 int 值。
  • 异常
    • 如果下一个标记不是有效的 int 值,抛出 InputMismatchException
    • 如果输入结束,没有可用标记,抛出 NoSuchElementException
    • 如果此扫描器被关闭,抛出 IllegalStateException
  • 用途:主要用于解析流式输入(如 System.in, 文件等)。

代码示例

import java.util.Scanner;
public class ScannerToIntExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个整数: ");
        try {
            // 读取用户输入并转换为 int
            int number = scanner.nextInt();
            System.out.println("你输入的整数是: " + number);
        } catch (Exception e) {
            System.out.println("输入无效,请输入一个有效的整数。");
        } finally {
            // 关闭 Scanner,防止资源泄漏
            scanner.close();
        }
    }
}

使用 NumberFormatDecimalFormat (处理国际化)

如果你的字符串可能包含千位分隔符(如 "1,000")或者需要根据特定地区的格式进行解析,NumberFormat 是更好的选择。

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

代码示例

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class NumberFormatToIntExample {
    public static void main(String[] args) {
        // 假设字符串是美国格式,包含逗号
        String usStr = "1,234,567";
        // 创建一个美国地区的数字格式器
        NumberFormat usFormat = NumberFormat.getInstance(Locale.US);
        try {
            // parse() 方法返回的是 Number,需要强制转换为 Integer
            Number number = usFormat.parse(usStr);
            int intValue = number.intValue();
            System.out.println("美国格式字符串 '" + usStr + "' 转换为整数: " + intValue); // 输出: 1234567
        } catch (ParseException e) {
            System.out.println("解析失败: " + e.getMessage());
        }
        // 中国格式字符串 (不含逗号)
        String cnStr = "890123";
        NumberFormat cnFormat = NumberFormat.getInstance(Locale.CHINA);
        try {
            Number number = cnFormat.parse(cnStr);
            int intValue = number.intValue();
            System.out.println("中国格式字符串 '" + cnStr + "' 转换为整数: " + intValue); // 输出: 890123
        } catch (ParseException e) {
            System.out.println("解析失败: " + e.getMessage());
        }
    }
}

总结与最佳实践

方法 返回类型 主要用途 优点 缺点
Integer.parseInt() int (原始类型) 通用,从 String 转 int 最直接,性能最好 抛出 NumberFormatException,需要处理异常
Integer.valueOf() Integer (对象类型) 需要 Integer 对象时 可用于泛型,可能利用缓存 比直接 parseInt 多一层对象操作
Scanner.nextInt() int (原始类型) 从输入流(如控制台)读取 方便处理用户输入 专为流设计,不适合单纯转换一个 String
NumberFormat.parse() Number (需转换) 处理带千位分隔符的国际化数字 灵活,支持地区特定格式 代码稍复杂,性能较低

核心建议:

  1. 首选 Integer.parseInt():在绝大多数情况下,当你有一个 String 并想得到一个 int 时,Integer.parseInt() 是最标准、最高效的选择。
  2. 始终使用 try-catch 处理异常:因为输入的 String 可能无效,所以将转换逻辑放在 try-catch 块中捕获 NumberFormatException 是一个健壮编程的必备习惯。
  3. 处理空格:如果字符串前后可能有空格,先用 String.trim() 方法清理一下。
  4. 处理 null:在转换前,最好检查一下字符串是否为 null,以避免 NullPointerException

完整的健壮转换示例

public class RobustStringToInt {
    public static int convertToInt(String str) {
        // 1. 首先检查是否为 null 或空字符串
        if (str == null || str.trim().isEmpty()) {
            // 可以抛出自定义异常或返回一个默认值,这里我们返回 0 作为示例
            return 0; 
        }
        // 2. 去除首尾空格
        String trimmedStr = str.trim();
        // 3. 尝试转换,并捕获可能的异常
        try {
            return Integer.parseInt(trimmedStr);
        } catch (NumberFormatException e) {
            System.err.println("警告: 无法将字符串 '" + str + "' 转换为整数。");
            // 根据业务需求决定如何处理,可以返回默认值或抛出异常
            return 0; // 或者 throw new IllegalArgumentException("Invalid number format: " + str);
        }
    }
    public static void main(String[] args) {
        System.out.println(convertToInt("123"));    // 输出: 123
        System.out.println(convertToInt("-456"));   // 输出: -456
        System.out.println(convertToInt("  789  ")); // 输出: 789
        System.out.println(convertToInt("abc"));    // 输出: 0 (并打印警告)
        System.out.println(convertToInt(null));     // 输出: 0
        System.out.println(convertToInt(""));       // 输出: 0
    }
}
string转int java有哪些方法?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇