杰瑞科技汇

Java String类型转换有哪些常用方法?

  1. 其他基本数据类型或对象转换为 String
  2. String 转换为其他基本数据类型或对象

下面我将详细讲解这两种转换的各种方法,并附上示例代码和最佳实践。

Java String类型转换有哪些常用方法?-图1
(图片来源网络,侵删)

其他类型转换为 String

将其他类型转换为字符串有几种常见的方法,各有优缺点。

方法1:使用 String.valueOf()

这是最推荐、最规范的方法,它是一个静态方法,可以接受所有基本数据类型和对象作为参数,并将其转换为字符串。

  • 优点
    • 代码清晰易读。
    • 可以处理 null 值,如果传入 null,它会返回字符串 "null",而不会抛出 NullPointerException
  • 适用场景:所有场景,尤其是需要处理可能为 null 的对象时。
int num = 123;
double d = 123.45;
boolean flag = true;
Object obj = null; // 对象可能是 null
String str1 = String.valueOf(num);       // 结果: "123"
String str2 = String.valueOf(d);        // 结果: "123.45"
String str3 = String.valueOf(flag);     // 结果: "true"
String str4 = String.valueOf(obj);      // 结果: "null" (不会报错)

方法2:使用 toString()

几乎所有 Java 对象都有一个 toString() 方法,用于返回该对象的字符串表示形式。

  • 优点

    面向对象,是对象自身的方法。

    Java String类型转换有哪些常用方法?-图2
    (图片来源网络,侵删)
  • 缺点
    • 不能用于基本数据类型(如 int, double 等),必须先将它们包装成对应的对象(如 Integer, Double)。
    • 如果对象是 null,直接调用 toString() 会抛出 NullPointerException
int num = 123;
double d = 123.45;
Object obj = null;
// 基本类型需要先装箱
String str1 = Integer.valueOf(num).toString();   // 结果: "123"
String str2 = Double.valueOf(d).toString();      // 结果: "123.45"
// 对于非null对象
String str3 = "Hello".toString();               // 结果: "Hello"
// 对于 null 对象,会抛出异常
// String str4 = obj.toString(); // 抛出 NullPointerException

方法3:使用空字符串连接 "" + value

这是一种非常简洁的“语法糖”,在开发中很常见。

  • 优点
    • 代码非常简洁。
    • 编译器会自动处理基本类型的装箱和调用 toString()
  • 缺点
    • valuenull,结果会是 "null",虽然不会报错,但这可能不是你想要的结果。
    • 性能上可能略低于 String.valueOf(),因为涉及到创建一个临时的 StringBuilder 对象。
int num = 123;
Object obj = null;
String str1 = "" + num;       // 结果: "123"
String str2 = "" + obj;       // 结果: "null"

方法4:使用 String.format()

当你需要将其他类型格式化成特定格式的字符串时,这个方法非常有用。

  • 优点

    功能强大,可以指定格式(如小数位数、对齐方式等)。

  • 适用场景:需要格式化输出的场景。
int num = 123;
double d = 123.4567;
String str1 = String.format("%d", num);        // 结果: "123"
String str2 = String.format("%.2f", d);       // 结果: "123.46" (保留两位小数)

String 转换为其他类型

将字符串转换为其他类型时,最关键的是要处理可能发生的异常,主要是 NumberFormatException

Java String类型转换有哪些常用方法?-图3
(图片来源网络,侵删)

转换为基本数据类型

对于基本数据类型,通常使用其对应的包装类的 parseXxx()valueOf() 方法。

目标类型 推荐方法 示例 异常
int Integer.parseInt() int num = Integer.parseInt("123"); NumberFormatException
long Long.parseLong() long l = Long.parseLong("123L"); NumberFormatException
double Double.parseDouble() double d = Double.parseDouble("123.45"); NumberFormatException
float Float.parseFloat() float f = Float.parseFloat("123.45f"); NumberFormatException
boolean Boolean.parseBoolean() boolean b = Boolean.parseBoolean("true"); 不会抛出 NumberFormatException"true" (不区分大小写) 返回 true,其他任何字符串都返回 false

重要提示

  • parseXxx() 方法要求字符串内容必须完全匹配数字的格式,否则会抛出 NumberFormatException
  • Boolean.parseBoolean() 比较特殊,它对字符串内容不挑剔,只要不是 true,就返回 false
  • 空字符串 () 也会导致 NumberFormatException
String intStr = "100";
String doubleStr = "99.99";
String boolStr = "TRUE";
String invalidStr = "abc";
try {
    int i = Integer.parseInt(intStr);        // 成功, i = 100
    double d = Double.parseDouble(doubleStr); // 成功, d = 99.99
    boolean b = Boolean.parseBoolean(boolStr); // 成功, b = true
    // Integer.parseInt(invalidStr); // 抛出 NumberFormatException
    // Integer.parseInt("");        // 抛出 NumberFormatException
} catch (NumberFormatException e) {
    System.err.println("无法将字符串转换为数字: " + e.getMessage());
}

转换为包装类

包装类除了 parseXxx(),还有 valueOf() 方法,它们的功能几乎一样,valueOf() 内部也是调用了 parseXxx(),但返回的是包装类对象而不是基本类型。

String str = "123";
Integer numObj = Integer.valueOf(str); // 返回 Integer 对象
Long longObj = Long.valueOf(str);     // 返回 Long 对象
// 可以自动拆箱 (unboxing)
int num = Integer.valueOf(str); // num 是基本类型 int

转换为其他对象(如 Date

对于自定义对象或特定类型的对象(如 Date, LocalDateTime),通常使用它们的构造方法静态的 parse() 方法,这些方法通常有自己特定的字符串格式要求。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
// 将字符串转换为 LocalDate (Java 8+)
String dateStr = "2025-10-27";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dateStr, formatter);
System.out.println(date); // 输出: 2025-10-27

安全转换的最佳实践

在实际开发中,进行字符串转换时必须考虑健壮性。

使用 try-catch 处理异常

这是最基本也是最安全的做法,可以防止程序因无效输入而崩溃。

public static int safeParseInt(String str, int defaultValue) {
    try {
        return Integer.parseInt(str);
    } catch (NumberFormatException e) {
        // 如果转换失败,返回一个默认值
        return defaultValue;
    }
}
// 使用示例
String input = "123a";
int number = safeParseInt(input, -1); // number 的值将是 -1
System.out.println(number);

使用 Apache Commons Lang 或 Guava 库

这些第三方库提供了更强大、更方便的工具类,可以简化很多操作。

使用 Apache Commons Lang 的 NumberUtils:

// 添加依赖: org.apache.commons:commons-lang3
import org.apache.commons.lang3.math.NumberUtils;
String str = "123";
if (NumberUtils.isParsable(str)) {
    int num = NumberUtils.toInt(str, 0); // 转换失败返回默认值 0
    System.out.println(num);
}

使用 Google Guava 的 Ints:

// 添加依赖: com.google.guava:guava
import com.google.common.primitives.Ints;
String str = "123";
Integer num = Ints.tryParse(str); // 转换失败返回 null
System.out.println(num);
// 也可以指定默认值
int numWithDefault = Ints.tryParse(str, -1);
System.out.println(numWithDefault);

总结表格

转换方向 推荐方法 示例 备注
任意类型 → String String.valueOf() String.valueOf(123) 首选,安全、规范,可处理 null
"" + 123 简洁,但性能略低,null 会变成 "null"
obj.toString() "hello".toString() 面向对象,但 null 会报错,不能用于基本类型
Stringint Integer.parseInt() Integer.parseInt("123") 抛出 NumberFormatException
StringInteger Integer.valueOf() Integer.valueOf("123") 抛出 NumberFormatException
Stringdouble Double.parseDouble() Double.parseDouble("123.45") 抛出 NumberFormatException
Stringboolean Boolean.parseBoolean() Boolean.parseBoolean("true") 不会抛出异常,非 true 都返回 false
String → 其他对象 对象的.parse() 或构造方法 LocalDate.parse("...") 依赖特定类的解析规则

希望这份详细的总结能帮助你完全掌握 Java 中的字符串类型转换!

分享:
扫描分享到社交APP
上一篇
下一篇