Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:对字符串数组进行排序,其字符串表示int_Java_Sorting - Fatal编程技术网

Java:对字符串数组进行排序,其字符串表示int

Java:对字符串数组进行排序,其字符串表示int,java,sorting,Java,Sorting,我有字符串[]数组 {"3","2","4","10","11","6","5","8","9","7"} 我想按数字顺序排序,而不是按字母顺序 如果我使用 Arrays.sort(myarray); 我得到 {"10","11","2","3","4","5","6","7","8","9"} 而不是 {"2","3","4","5","6","7","8","9","10","11"} 我认为将字符串s转换为ints是迄今为止最简单、最有效的方法: int[] myIntArray

我有
字符串[]
数组

{"3","2","4","10","11","6","5","8","9","7"}
我想按数字顺序排序,而不是按字母顺序

如果我使用

Arrays.sort(myarray);
我得到

{"10","11","2","3","4","5","6","7","8","9"}
而不是

{"2","3","4","5","6","7","8","9","10","11"}

我认为将
字符串
s转换为
int
s是迄今为止最简单、最有效的方法:

int[] myIntArray = new int[myarray.length];

for (int i = 0; i < myarray.length; i++) {
    myIntArray[i] = Integer.parseInt(myarray[i]);
}
int[]myIntArray=newint[myarray.length];
for(int i=0;i
然后对整数数组进行排序。如果确实需要,您可以随时在以后转换回:

for (int i = 0; i < myIntArray.length; i++) {
    myarray[i] = "" + myIntArray[i];
}
for(int i=0;i

另一种方法是使用该接口来准确说明如何比较元素,但这可能相当于将每个
字符串
值转换为
int
,从而使上述方法更加有效。

尝试一个自定义
比较器,如下所示:

    Arrays.sort(myarray, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
        }
    });
Arrays.sort(myarray,newcomparator(){
@凌驾
公共整数比较(字符串o1、字符串o2){
返回Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
}
});

希望你喜欢

所需输出包含字符串的相应整数的数字顺序。因此,简单地您无法避免将字符串转换为整数。作为vikingsteve的替代比较器,您可以使用:

Arrays.sort(array, new Comparator<String>() {
    @Override
    public int compare(String str1, String str2) {
        return Integer.parseInt(str1) - Integer.parseInt(str2);
    }
});
Arrays.sort(数组,新比较器(){
@凌驾
公共整数比较(字符串str1、字符串str2){
返回Integer.parseInt(str1)-Integer.parseInt(str2);
}
});
公共类测试1{

public static void main(String[] args) 
{
    String[] str = {"3","2","4","10","11","6","5","8","9","7"};
    int[] a = new int[str.length];
    for(int i=0;i<a.length;i++)
    {
        a[i]=Integer.parseInt(str[i]);
    }
    Arrays.sort(a);
    for(int i=0;i<a.length;i++)
    {
        str[i]=String.valueOf(a[i]);
    }
}
publicstaticvoidmain(字符串[]args)
{
字符串[]str={“3”、“2”、“4”、“10”、“11”、“6”、“5”、“8”、“9”、“7”};
int[]a=新的int[str.length];

对于(int i=0;iU),如果它只包含字符串格式的数字,则可以使用sol-1

解决方案1:-
我发现这篇关于通过数字排序对字符串进行排序的文章也适用于可能包含或不包含数字的字符串:

本文链接了一个Java实现示例。 使用该类,您应该能够按如下方式对数组进行数字排序:

Arrays.sort(myarray, new AlphanumComparator());

如果字符串数组中的所有元素都表示数字,并且数字始终为正,那么有一种简单的方法可以对数字进行数字排序,而不限制数字的值

这是基于这样一个事实,即在这种情况下,具有较大位数的数字总是高于具有较小位数的数字

首先比较位数,然后(仅当位数相同时)按字母顺序比较值:

Arrays.sort(array,
            Comparator.comparing(String::length).thenComparing(Function.identity()));

在jdk8中,可以使用lambda编写此代码

List List=Arrays.asList(“3”、“2”、“4”、“10”、“11”、“6”、“5”、“8”、“9”、“7”);
list.sort(Comparator.comparingInt(Integer::valueOf));
list.forEach(System.out::println);
尤其是输入

String[]{“3.b”、“2.c”、“4.d”、“10.u”、“11.a”、“6.p”、“5.i”、“8.t”、“9.e”、“7.i”}
您可以使用string.subString选择真正要排序的值。

files.sort(Comparator.comparingInt(a->Integer.valueOf(a.substring(0,a.indexOf(“.”))));

如果您有要用作数字的字符串,为什么不将它们转换为适当的数字类型?然后,当您将它们用作数字后,您总是可以再次将它们转换回字符串…如果您想走更难的路线:为此目的创建自定义比较器…您不能循环数组并转换它们吗nto intsI了解比较器,但最有效的方法是什么?Compator还是简单转换?请阅读我下面的评论:首先转换整个数组总是更有效,因为所有排序算法进行的比较都多于列表的大小。如果使用字符串数组按数组排序。sort()然后,您就没有办法将它们按数字排序了。因为您甚至不能更改equals方法,而且无论如何,数字数组是最佳选择。我喜欢这个解决方案的简洁性,但与预转换数组相比,性能有点下降,因为我们每次都将
字符串
转换为
int
e我们比较:因为比较的数量总是大于列表的大小,所以我们进行的转换比需要的要多。我不知道性能是否是OP的一个问题,但值得记住。是的,尽管我经常使用快速而优雅的解决方案,而不是更彻底的性能优化解决方案,直到我知道需要后者。只是一个建议:也许
Integer.toString(myIntArray[i])
会比
“”+myIntArray[i]
更明确地说明类型转换
public class CustomComparator implements Comparator<String>{

    @Override
    public int compare(String s1, String s2) {
        Integer i1=null;
        Integer i2=null;
        try {
            i1 = Integer.parseInt(s1);
        } catch (NumberFormatException e) {
        }

        try {
            i2 = Integer.parseInt(s2);
        } catch (NumberFormatException e) {
        }

        if(i1!=null && i2!=null){
            return i1.compareTo(i2);
        }else{
            return s1.compareTo(s2);
        }
    }

}
public static void main(){
String []arr = {"3","2","4","10","11","6","5","8","9","7","jgj","ek"};
Arrays.sort(arr, new CustomComparator());
        for(String s:arr){
            System.out.print(s+"  ");
        }
}
Arrays.sort(myarray, new AlphanumComparator());
Arrays.sort(array,
            Comparator.comparing(String::length).thenComparing(Function.identity()));