Java:以数字方式对String数组进行排序

我有一个包含以下条目的String数组:

Array[0] = "70% Marc" Array[1] = "50% Marc" Array[2] = "100% Marc" Array[3] = "20% Marc" 

我想把这个数组降序排序。 当我使用Arrays.sort(Array)它会对它进行降序排序,但100% Marc位于底部(因为它只查看第一个字符进行排序)。 我希望它像这样排序:

 "100% Marc" "70% Marc" "50% Marc" "20% Marc" 

我怎样才能做到这一点?

编写自己的CustomStringComparator并将其与sort方法一起使用。

 public class CustomStringComparator implements Comparator{ @Override public int compare(String str1, String str2) { // extract numeric portion out of the string and convert them to int // and compare them, roughly something like this int num1 = Integer.parseInt(str1.substring(0, str1.indexOf("%") - 1)); int num2 = Integer.parseInt(str2.substring(0, str2.indexOf("%") - 1)); return num1 - num2; } } 

您必须使用自定义Comparator 。 基本上在您的方法compare()您将编写逻辑来订购两个String

你需要一个自定义比较器:

 import java.util.Comparator; public class CustomComparator implements Comparator{ @Override public int compare(String firstString, String secondString) { int number1 = Integer.parseInt(firstString.substring(0, firstString.indexOf('%') - 1); int number2 = Integer.parseInt(secondString.substring(0, secondString.indexOf('%') - 1); return number1.compareTo(number2); } } 

使用这个比较器,如下所示:

 List entries = new ArrayList(); entries.add("70% Marc"); entries.add("50% Marc"); entries.add("100% Marc"); entries.add("20% Marc"); CustomComparator comparator = new CustomComparator(); Collections.sort(entries, comparator); 

它不是在查看第一个字符,而是基于字符串值进行排序,就像您在数组中所拥有的那样。

我建议存储两个字段,

数组[0,0] = 50; 数组[0,1] =“马克”

然后根据数字字段进行排序,如果这是您所追求的行为。

您需要实现一个自定义Comparator ,通过删除百分号来处理比较:

 public int compare(String str1, String str2) { Integer number1 = Integer.parseInt(str1.substring(0, str1.length - 1)); Integer number2 = Integer.parseInt(str1.substring(0, str2.length - 1)); return number1.compareTo(number2); // or use primitives, and then: return (x < y) ? -1 : ((x == y) ? 0 : 1); // but that's harder to read } 

比较本身可以通过使用Integer包装器,我粘贴的代码(取自包装器)或guava的Ints.compare(int1, int2)

然后使用Collections.sort(array, comparator)