按值类型对数组进行排序

时间:2016-11-28 02:43:56

标签: java arrays sorting

一个数组包含数字字符串和混合字符串值。如何对此数组进行排序并首先打印数值,然后打印剩余的字符串?

1 10 13 2 1, 10a 13a 1a

我想要这样的输出 - &gt; import java.util.ArrayList; import java.util.Arrays; import java.util.regex.*; public class sortprog { public static void main(String[] args) { String[] s={"1","2","13","13a","10","10a","1a","1,"}; ArrayList alnubers=new ArrayList(); ArrayList alstrings=new ArrayList(); int count=0; for(int i=0;i<s.length;i++) { if(Pattern.matches("[0-9]+",s[i])) { alnubers.add(s[i]); } else { alstrings.add(s[i]); } } /*for(int i=0;i<s.length;i++) { String str=s[i]; for ( int j = 0; j < str.length(); ++j ) { char c = str.charAt(j); int k = (int) c; //System.out.println("ASCII OF "+c +" = " + k + "."); if(k>=48&&k<=57) { count++; } else { count=0; break; } } if(count!=0) { alnubers.add(str); count=0; } else { alstrings.add(str); count=0; } }*/ String[] sarr = new String[alstrings.size()]; alstrings.toArray(sarr); Arrays.sort(sarr); String[] narr = new String[alnubers.size()]; alnubers.toArray(narr); Arrays.sort(narr); String[] finalarr=new String[sarr.length+narr.length]; for(int l=0;l<narr.length;l++) { finalarr[l]=narr[l]; } int i=0; for(int l=narr.length;l<sarr.length+narr.length;l++) { finalarr[l]=sarr[i]; i++; } for(int f=0;f<finalarr.length;f++) { System.out.println(finalarr[f]); } } }

我正在尝试这样,我得到了正确的输出,但我想让它变得简单

A

1 个答案:

答案 0 :(得分:0)

您可以使用自己的比较器调用sort:

String[] s = { "1", "2", "13", "13a", "10", "10a", "1a", "1," };
Arrays.sort(s, new Comparator<String>() {

    @Override
    public int compare(String arg0, String arg1) {
        if (arg0.matches("\\d+")
                && !arg1.matches("\\d+")) {
            return -1;
        } else if (!arg0.matches("\\d+")
                && arg1.matches("\\d+")) {
            return 1;
        } else {
            return 0;
        }
    }

});
System.out.println(Arrays.toString(s));

这样做是为了创建一个比较器,使得只包含低于数字(\\d)的数字的字符串比没有数字的字符串低,所以它们在排序时会先出现。

你可以在比较器中输入你喜欢的任何代码,所以如果你想先得到一个数字后跟一个逗号,那么这很容易做到。