一个数组包含数字字符串和混合字符串值。如何对此数组进行排序并首先打印数值,然后打印剩余的字符串?
1 10 13 2 1, 10a 13a 1a
我想要这样的输出 - > 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
答案 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
)的数字的字符串比没有数字的字符串低,所以它们在排序时会先出现。
你可以在比较器中输入你喜欢的任何代码,所以如果你想先得到一个数字后跟一个逗号,那么这很容易做到。