19

私は次String[]のような配列を持っています

{"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"}
4

9 に答える 9

23

Comparator次のようなカスタムを試してください。

    Arrays.sort(myarray, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
        }
    });

気に入っていただければ幸いです。

于 2013-03-08T08:48:30.413 に答える
5

Strings をsに変換する最も簡単で効率的な方法はint次のとおりです。

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

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

次に、整数配列をソートします。本当に必要な場合は、後でいつでも元に戻すことができます。

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

別の方法として、Comparatorインターフェースを使用して要素の比較方法を正確に指示することもできますが、それはおそらく各String値をintとにかく に変換することになり、上記のアプローチがはるかに効率的になります。

于 2013-03-08T08:46:22.227 に答える
2

文字列形式の数値のみが含まれている場合、U は sol-1 を使用できます。

解決策-1: -

String []arr = {"3","2","4","10","11","6","5","8","9","7"};
        Set<Integer> set = new TreeSet<Integer>();
        Arrays.sort(arr);
        for(String s:arr){
            System.out.print(s+"  ");
            set.add(Integer.parseInt(s));
        }
        System.out.println(set);
        Integer i = new Integer("4f");
        System.out.println(i);

解決策-2:-

String []arr = {"3","2","4","10","11","6","5","8","9","7","jgj","ek"};
        Set<Integer> intSet = new TreeSet<Integer>();
        Set<String> strSet = new TreeSet<String>();
        Arrays.sort(arr);
        for(String s:arr){
            try {
                int i = Integer.parseInt(s);
                intSet.add(i);
            } catch (NumberFormatException e) {
                strSet.add(s);
            }
        }
        List<String> result = new ArrayList<String>();
        for(int val:intSet){
            result.add(val+"");
        }
        result.addAll(strSet);
        System.out.println(result);
    }

ソリューション-3:-

CustomComparator クラスを 1 つ作成し、それを sort() メソッドに渡します。

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+"  ");
        }
}
于 2013-03-08T09:07:01.817 に答える
1

目的の出力には、文字列の対応する整数の番号順が含まれています。したがって、文字列から整数への変換を避けることはできません。vikingsteve の代わりのコンパレータとして、これを使用できます。

Arrays.sort(array, new Comparator<String>() {
    @Override
    public int compare(String str1, String str2) {
        return Integer.parseInt(str1) - Integer.parseInt(str2);
    }
});
于 2013-03-08T08:53:38.057 に答える
0
public class test1 {

    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]);
        }
    }

}
于 2013-03-08T08:58:11.900 に答える