You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java拼接数组元素生成最大数字时NumberFormatException问题求解

解决拼接大数时的NumberFormatException问题并生成最大组合数

问题根源

原代码中,将两个数字拼接成字符串后直接转为Integer,但当拼接后的字符串长度超过10位时,数值会超出Integer.MAX_VALUE(2147483647),无法被Integer类型容纳,从而抛出NumberFormatException。比如输入[111311, 1113]时,拼接出的"111311111311"是12位数字,远大于Integer的最大值,转换必然失败。

另外,原代码的冒泡排序逻辑存在冗余,双重循环均从0开始会导致不必要的元素交换,排序效率低下。

解决方案

不需要将拼接后的字符串转为数字,直接通过字符串字典序比较即可判断组合后的大小(数字字符的字典序与数值大小顺序一致)。同时使用自定义比较器对字符串数组排序,确保最终拼接出最大数值,还要处理全0的边界情况。

修复后的代码

import java.util.Arrays;
import java.util.Comparator;

public class SortNumber {
    public static void main(String[] args) {
        int[] arr = {111311, 1113};
        String result = largestNumber(arr);
        System.out.println(result);
    }

    public static String largestNumber(int[] arr) {
        // 将int数组转换为字符串数组,避免数值操作的溢出问题
        String[] strArr = new String[arr.length];
        for (int i = 0; i < arr.length; i++) {
            strArr[i] = String.valueOf(arr[i]);
        }

        // 自定义比较器:比较两种拼接方式的字典序,让更大的组合排在前面
        Arrays.sort(strArr, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                String combineA = s1 + s2;
                String combineB = s2 + s1;
                // 逆序排序,确保大的组合优先排列
                return combineB.compareTo(combineA);
            }
        });

        // 处理全0的特殊情况,避免输出"00"这类无效结果
        if (strArr[0].equals("0")) {
            return "0";
        }

        // 拼接最终结果
        StringBuilder sb = new StringBuilder();
        for (String s : strArr) {
            sb.append(s);
        }
        return sb.toString();
    }
}

代码说明

  1. 字符串数组转换:直接将int数组转为字符串数组,彻底避免数值溢出问题。
  2. 自定义排序逻辑:通过比较s1+s2和s2+s1的字典序,决定两个元素的排列顺序——如果s2+s1更大,则s2排在s1前面,保证整体组合数值最大。
  3. 边界处理:当数组全为0时,直接返回"0",避免输出"00"这类不符合要求的结果。
  4. 高效排序:使用Arrays.sort配合自定义比较器,比手动实现冒泡排序更高效、更简洁。

内容的提问来源于stack exchange,提问作者Vaibhav More

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:56:03