2016-11-28 2 views
0

Один массив содержит как числовые строки, так и смешанные значения строк. Как отсортировать этот массив и напечатать числовые значения сначала и оставшиеся строки после?Сортировка массива по типу значений

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

Вы имеете в виду «сортировку» вместо «shorting»? – Goodies

+0

Проверьте функцию parseInt https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String) Вы можете поймать NumberFormatException для строк и отделить их вне. Затем сортируйте числа и строки отдельно. –

+0

@MaartenBodewes Я думаю, что это значение предназначено на основе вывода, предоставленного OP. –

ответ

0

Вы можете назвать своего рода с вашим собственным компаратором:

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

Что это такое, это создать компаратор, который делает strin gs, содержащие только цифры (\\d) более низкого порядка, чем те, которые этого не делают, поэтому они будут первыми при сортировке.

Вы можете поместить любой код, который вам нравится в компараторе, поэтому, если вы хотите иметь номер, за которым следует запятая, тогда это легко сделать.

+0

Список l = Arrays.asList (s); error coming hear –

+0

Да, список действительно не нужен. Мне нравятся коллекции. Однако удалил эту часть ответа. Обратите внимание: если компаратор становится слишком сложным, вы можете решить вычислить значение для каждой строки, а затем сравнить два значения. –

Смежные вопросы