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