如何在java中最有效地对字符串中的数字(可以是超大)进行排序

如何在java中最有效地对字符串中的数字(可以是超大)进行排序,java,string,algorithm,integer,Java,String,Algorithm,Integer,给定一个类似于“4100,-2147483647,1”的字符串,我想将其排序为“-2147483647,1,4100”。到目前为止,我已经尝试过拆分字符串,并对拆分生成的字符串运行parseInt。但是,由于parseInt无法处理范围外的数字,因此它引发了NumberFormatException。处理这个问题最有效的方法是什么?(时间,精度…)谢谢 将其转换为int将限制您的输入。如果将数字保留为字符串,则可能会有超过20亿位数字 之后,您可以创建一个算法来比较数字的大小。如果它们大小相同,

给定一个类似于“4100,-2147483647,1”的字符串,我想将其排序为“-2147483647,1,4100”。到目前为止,我已经尝试过拆分字符串,并对拆分生成的字符串运行parseInt。但是,由于parseInt无法处理范围外的数字,因此它引发了NumberFormatException。处理这个问题最有效的方法是什么?(时间,精度…)谢谢

将其转换为
int
将限制您的输入。如果将数字保留为字符串,则可能会有超过20亿位数字

之后,您可以创建一个算法来比较数字的大小。如果它们大小相同,从左到右检查每个数字,找出最大的数字。否则,数字越少的数字越小


还要检查负片,因为您似乎希望也检查负片。

将其转换为
int
将限制您的输入。如果将数字保留为字符串,则可能会有超过20亿位数字

之后,您可以创建一个算法来比较数字的大小。如果它们大小相同,从左到右检查每个数字,找出最大的数字。否则,数字越少的数字越小


还要检查底片,因为您似乎也希望检查。如果数字不符合
int
s,请尝试
long
s。与中一样,
parseLong


这不太可能,但如果你需要比这更大的东西,就用它。它可以处理你扔给它的任何东西。

如果数字不适合
int
s,请尝试
long
s。与中一样,
parseLong


这不太可能,但如果你需要比这更大的东西,就用它。它可以处理您向它抛出的任何数据。

您在示例中提供的数字都不在整数范围之外。下面的程序将解析您提供的字符串并对其进行适当排序

public static void main(String[] args) {
    String s = "4, 100, -2147483647, 1";

    String[] strArray = s.split(", ");

    ArrayList intList = new ArrayList();

    for(int i = 0; i < strArray.length; i++) {
        intList.add(Integer.parseInt(strArray[i]));
    }

    Collections.sort(intList);

    System.out.println(intList);
}

如果您的数字大于2147483647或小于-2147483648,则可以使用John Kugelman建议的长整数或大整数。

示例中提供的数字都不在整数范围之外。下面的程序将解析您提供的字符串并对其进行适当排序

public static void main(String[] args) {
    String s = "4, 100, -2147483647, 1";

    String[] strArray = s.split(", ");

    ArrayList intList = new ArrayList();

    for(int i = 0; i < strArray.length; i++) {
        intList.add(Integer.parseInt(strArray[i]));
    }

    Collections.sort(intList);

    System.out.println(intList);
}
如果您的数字大于2147483647或小于-2147483648,则可以使用John Kugelman建议的长整数或大整数。

尝试下面的代码

public static void main(String[] args) {
    String s = "4, 100, -2147483647, 1";

    String[] strArray = s.split(", ");

    List<BigDecimal> intList = new ArrayList<>();

    for (String element : strArray) {
        intList.add(new BigDecimal(element));
    }

    Collections.sort(intList);

    System.out.println(intList);
}
publicstaticvoidmain(字符串[]args){
字符串s=“4100,-2147483647,1”;
字符串[]strArray=s.split(“,”);
List intList=new ArrayList();
for(字符串元素:strArray){
add(新的BigDecimal(元素));
}
Collections.sort(intList);
System.out.println(intList);
}
尝试下面的代码

public static void main(String[] args) {
    String s = "4, 100, -2147483647, 1";

    String[] strArray = s.split(", ");

    List<BigDecimal> intList = new ArrayList<>();

    for (String element : strArray) {
        intList.add(new BigDecimal(element));
    }

    Collections.sort(intList);

    System.out.println(intList);
}
publicstaticvoidmain(字符串[]args){
字符串s=“4100,-2147483647,1”;
字符串[]strArray=s.split(“,”);
List intList=new ArrayList();
for(字符串元素:strArray){
add(新的BigDecimal(元素));
}
Collections.sort(intList);
System.out.println(intList);
}

首先将每个数字转换为字符串,并将其存储在字符串数组中 这里unsorted是对unsorted数组的引用。这里,我刚刚使用了一个lamda表达式作为比较器(java8),如果您想尝试为java7运行,只需使用一个具有给定条件的比较器并传递它

    Arrays.sort(unsorted, (left, right) -> {
        if (left.length() != right.length()) {
            return left.length() - right.length();
        } else {
            return left.compareTo(right);
        }
    });
    return unsorted;

首先将每个数字转换为字符串,并将其存储在字符串数组中 这里unsorted是对unsorted数组的引用。这里,我刚刚使用了一个lamda表达式作为比较器(java8),如果您想尝试为java7运行,只需使用一个具有给定条件的比较器并传递它

    Arrays.sort(unsorted, (left, right) -> {
        if (left.length() != right.length()) {
            return left.length() - right.length();
        } else {
            return left.compareTo(right);
        }
    });
    return unsorted;
根据Kotlin中的回答:

list.sortWith { left, right ->
    if (left.length != right.length)
        left.length - right.length
    else
        left.compareTo(right);
}
根据Kotlin中的回答:

list.sortWith { left, right ->
    if (left.length != right.length)
        left.length - right.length
    else
        left.compareTo(right);
}

超级大有多大?就像
long
big或
biginger
big?字面意思一样,您希望输出一个
String
,按数值递增的顺序列出数字。在输入中如何将数字分开?(在寻求支持处理运行时错误时,请务必剪切并粘贴错误消息(如果需要,请将区域设置调整为en)。@Vasan How big is super big?就像
long
big或
biginger
big?字面意思一样,您希望输出一个
String
,按数值递增的顺序列出数字。在输入中如何将数字分开?(在寻求支持处理运行时错误时,请务必剪切并粘贴错误消息(如果需要,请将区域设置调整为en)。@Vasan仍然可能溢出
BigInteger
不会。这可能仍然会溢出
BigInteger
不会。这将忽略问题示例中的负数。这将忽略问题示例中的负数。