一個數組包含數字字符串和混合字符串值。如何排序這個數組並首先打印數字值,然後打印剩餘的字符串?按值類型對數組排序
String[] s = {"1","2","13","13a","10","10a","1a","1,"};
我要像這樣的輸出 - >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]);
}
}
}
你的意思是「排序」而不是「短路」? – Goodies
檢查parseInt函數https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String) 您可以捕獲字符串的NumberFormatException並將它們分開出。然後分別對數字和字符串進行排序。 –
@MaartenBodewes我認爲價值是根據OP提供的產出預期的。 –