Java:对String数组进行排序,其字符串表示int

我有String[]数组之类的

 {"3","2","4","10","11","6","5","8","9","7"} 

我想按数字顺序对其进行排序,而不是按字母顺序排序。

如果我使用

 Arrays.sort(myarray); 

我知道了

 {"10","11","2","3","4","5","6","7","8","9"} 

代替

 {"2","3","4","5","6","7","8","9","10","11"} 

到目前为止,我认为将String s转换为int的最简单,最有效的方法是:

 int[] myIntArray = new int[myarray.length]; for (int i = 0; i < myarray.length; i++) { myIntArray[i] = Integer.parseInt(myarray[i]); } 

然后对整数数组进行排序。 如果你真的需要,你可以随后转换回来:

 for (int i = 0; i < myIntArray.length; i++) { myarray[i] = "" + myIntArray[i]; } 

另一种方法是使用Comparator接口来确切地说明元素的比较方式,但这可能相当于将每个String值转换为int - 使上述方法更有效。

尝试使用自定义Comparator ,如下所示:

  Arrays.sort(myarray, new Comparator() { @Override public int compare(String o1, String o2) { return Integer.valueOf(o1).compareTo(Integer.valueOf(o2)); } }); 

希望你喜欢!

您想要的输出包含字符串的相应整数的数字顺序。 因此, 您无法避免将字符串转换为整数。 作为vikingsteve的替代比较器,您可以使用:

 Arrays.sort(array, new Comparator() { @Override public int compare(String str1, String str2) { return Integer.parseInt(str1) - Integer.parseInt(str2); } }); 

如果只包含字符串格式的数字,则可以使用sol-1。

解决方案-1: –

 String []arr = {"3","2","4","10","11","6","5","8","9","7"}; Set set = new TreeSet(); Arrays.sort(arr); for(String s:arr){ System.out.print(s+" "); set.add(Integer.parseInt(s)); } System.out.println(set); Integer i = new Integer("4f"); System.out.println(i); 

方案2: –

 String []arr = {"3","2","4","10","11","6","5","8","9","7","jgj","ek"}; Set intSet = new TreeSet(); Set strSet = new TreeSet(); Arrays.sort(arr); for(String s:arr){ try { int i = Integer.parseInt(s); intSet.add(i); } catch (NumberFormatException e) { strSet.add(s); } } List result = new ArrayList(); for(int val:intSet){ result.add(val+""); } result.addAll(strSet); System.out.println(result); } 

解决方案3: –

编写一个CustomComparator类并将其传递给sort()方法。

 public class CustomComparator implements Comparator{ @Override public int compare(String s1, String s2) { Integer i1=null; Integer i2=null; try { i1 = Integer.parseInt(s1); } catch (NumberFormatException e) { } try { i2 = Integer.parseInt(s2); } catch (NumberFormatException e) { } if(i1!=null && i2!=null){ return i1.compareTo(i2); }else{ return s1.compareTo(s2); } } } 

 public static void main(){ String []arr = {"3","2","4","10","11","6","5","8","9","7","jgj","ek"}; Arrays.sort(arr, new CustomComparator()); for(String s:arr){ System.out.print(s+" "); } } 

公共类test1 {

 public static void main(String[] args) { String[] str = {"3","2","4","10","11","6","5","8","9","7"}; int[] a = new int[str.length]; for(int i=0;i 

}

我发现这篇文章是关于通过数字排序对字符串进行排序的,也可以是包含数字的字符串:

Alphanum算法

本文链接了一个Java实现示例。 使用该类,您应该能够以数字方式对数组进行排序,如下所示:

 Arrays.sort(myarray, new AlphanumComparator()); 

如果所有元素,如果您的String数组表示数字,并且数字总是正数,那么有一种简单的方法可以数字排序而不限制数字的值。

这是基于这样的事实:在这种情况下,具有较大位数的数字总是高于具有较小位数的数字。

首先比较一下数字,然后(只有当数字相同时)才能按字母顺序比较数字:

 Arrays.sort(array, Comparator.comparing(String::length).thenComparing(Function.identity()));