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