Один массив содержит как числовые строки, так и смешанные значения строк. Как отсортировать этот массив и напечатать числовые значения сначала и оставшиеся строки после?Сортировка массива по типу значений
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]);
}
}
}
Вы имеете в виду «сортировку» вместо «shorting»? – Goodies
Проверьте функцию parseInt https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String) Вы можете поймать NumberFormatException для строк и отделить их вне. Затем сортируйте числа и строки отдельно. –
@MaartenBodewes Я думаю, что это значение предназначено на основе вывода, предоставленного OP. –