杰瑞科技汇

java string 转 long

使用 Long.parseLong(String s) - 推荐

这是最直接、最常用的方法,它会尝试将给定的 String 参数解析为 long 类型的有符号十进制数。

java string 转 long-图1
(图片来源网络,侵删)

方法签名

public static long parseLong(String s) throws NumberFormatException

特点

  • 返回值long 原始类型。
  • 异常String 不是有效的数字格式,会抛出 NumberFormatException

示例代码

public class StringToLongExample {
    public static void main(String[] args) {
        String str1 = "123456789";
        String str2 = "-987654321";
        String str3 = "1234567890123456789"; // 超过 int 范围,但在 long 范围内
        String str4 = "abc"; // 无效数字
        String str5 = "";   // 空字符串
        String str6 = "   123   "; // 包含前后空格
        try {
            // 转换有效的数字字符串
            long num1 = Long.parseLong(str1);
            System.out.println("字符串 '" + str1 + "' 转换为 long: " + num1);
            long num2 = Long.parseLong(str2);
            System.out.println("字符串 '" + str2 + "' 转换为 long: " + num2);
            long num3 = Long.parseLong(str3);
            System.out.println("字符串 '" + str3 + "' 转换为 long: " + num3);
            // 自动去除前后空格
            long num6 = Long.parseLong(str6);
            System.out.println("字符串 '" + str6 + "' 转换为 long: " + num6);
            // 转换无效的数字字符串
            long num4 = Long.parseLong(str4); // 这里会抛出异常
        } catch (NumberFormatException e) {
            System.err.println("错误: 字符串 '" + str4 + "' 不是有效的 long 格式。");
            e.printStackTrace();
        }
        try {
            long num5 = Long.parseLong(str5); // 这里会抛出异常
        } catch (NumberFormatException e) {
            System.err.println("错误: 字符串 '" + str5 + "' 不能为空。");
            e.printStackTrace();
        }
    }
}

输出结果

字符串 '123456789' 转换为 long: 123456789
字符串 '-987654321' 转换为 long: -987654321
字符串 '1234567890123456789' 转换为 long: 1234567890237695481
字符串 '   123   ' 转换为 long: 123
错误: 字符串 'abc' 不是有效的 long 格式。
java.lang.NumberFormatException: For input string: "abc"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.base/java.lang.Long.parseLong(Long.java:702)
    at java.base/java.lang.Long.parseLong(Long.java:864)
    at StringToLongExample.main(StringToLongExample.java:22)
错误: 字符串 '' 不能为空。
java.lang.NumberFormatException: For input string: ""
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.base/java.lang.Long.parseLong(Long.java:702)
    at java.base/java.lang.Long.parseLong(Long.java:864)
    at StringToLongExample.main(StringToLongExample.java:31)

使用 Long.valueOf(String s) - 返回包装类

Long.valueOf() 方法也会将 String 解析为 long,但它返回的是一个 Long 对象(long 的包装类)。

方法签名

public static Long valueOf(String s) throws NumberFormatException

特点

  • 返回值Long 对象。
  • 异常:同样,String 无效,会抛出 NumberFormatException

何时使用?

当你需要一个 Long 对象而不是原始 long 类型时使用,当这个值需要被放入一个 List<Long> 或其他集合中时,Java 的自动装箱机制会自动处理 longLong 之间的转换,所以很多时候两者可以互换。

示例代码

public class StringToLongWrapperExample {
    public static void main(String[] args) {
        String str = "987654321";
        // 使用 valueOf() 获取 Long 对象
        Long longObject = Long.valueOf(str);
        System.out.println("转换结果 (Long 对象): " + longObject);
        System.out.println("对象类型: " + longObject.getClass().getName());
        // 你可以轻松地将其转换回原始类型
        long primitiveLong = longObject; // 自动拆箱
        System.out.println("转换结果 (原始 long): " + primitiveLong);
    }
}

输出结果

转换结果 (Long 对象): 987654321
对象类型: java.lang.Long
转换结果 (原始 long): 987654321

其他重载方法(指定进制)

Long.parseLongLong.valueOf 都有重载版本,允许你指定数字的基数(进制)。

方法签名

public static long parseLong(String s, int radix) throws NumberFormatException
public static Long valueOf(String s, int radix) throws NumberFormatException
  • s: 要解析的字符串。
  • radix: 解析时使用的基数(进制),范围在 Character.MIN_RADIX (2) 到 Character.MAX_RADIX (36) 之间,如果基数为 10,可以省略。

示例代码(解析二进制、十六进制字符串)

public class StringToLongRadixExample {
    public static void main(String[] args) {
        // 二进制字符串
        String binaryStr = "101010"; // 表示十进制的 42
        long fromBinary = Long.parseLong(binaryStr, 2);
        System.out.println("二进制 '" + binaryStr + "' 转换为十进制: " + fromBinary);
        // 十六进制字符串
        String hexStr = "FF"; // 表示十进制的 255
        long fromHex = Long.parseLong(hexStr, 16);
        System.out.println("十六进制 '" + hexStr + "' 转换为十进制: " + fromHex);
        // 八进制字符串
        String octalStr = "77"; // 表示十进制的 63
        long fromOctal = Long.parseLong(octalStr, 8);
        System.out.println("八进制 '" + octalStr + "' 转换为十进制: " + fromOctal);
    }
}

输出结果

二进制 '101010' 转换为十进制: 42
十六进制 'FF' 转换为十进制: 255
八进制 '77' 转换为十进制: 63

总结与最佳实践

方法 返回类型 是否抛出异常 优点 缺点 推荐场景
Long.parseLong() long (原始类型) 直接返回原始类型,效率高 需要手动处理异常 大多数情况下的首选,当你需要一个 long 值进行计算时。
Long.valueOf() Long (包装类) 返回对象,方便用于泛型集合 涉及对象创建,开销略大 当你需要一个 Long 对象时,例如存入 List 或作为 Map 的键。
Long.parseLong(s, radix) long (原始类型) 支持任意进制(2-36) 需要指定进制参数 当需要解析非十进制字符串时(如二进制、十六进制)。

最佳实践

  1. 始终使用 try-catch:因为你无法保证输入的 String 一定是有效的数字,直接调用而不处理异常可能会导致程序崩溃。
  2. 首选 Long.parseLong():除非你有特殊理由需要一个 Long 对象,否则 parseLong() 是更高效、更直接的选择。
  3. 处理空格Long.parseLong() 会自动忽略字符串前后的空格,但如果字符串中间有空格或包含其他非数字字符(除了符号 或 ),则会抛出异常。
  4. 考虑数值范围:确保字符串表示的数值在 Long 的范围内(-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807),否则会溢出,导致一个不正确的负数,Java 8 之后,可以使用 Long.parseUnsignedLong() 来处理无符号的过大数字。
java string 转 long-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇