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

3

我有一个字符串数组,包含以下条目:

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"

我该怎么做呢?

5个回答

4

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

public class CustomStringComparator implements Comparator<String>{

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

    }
}

1

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

import java.util.Comparator;

public class CustomComparator implements Comparator<String>{

    @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<String> entries = new ArrayList<String>();
entries.add("70% Marc");
entries.add("50% Marc");
entries.add("100% Marc");
entries.add("20% Marc");

CustomComparator comparator = new CustomComparator();
Collections.sort(entries, comparator);

1

您必须使用自定义比较器。基本上,在您的方法compare()中,您将编写对两个字符串排序的逻辑。


0

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

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)


0

它不是查看第一个字符,而是基于字符串值进行排序,因为这是您在数组中拥有的内容。

我建议存储两个字段,

Array [0,0] = 50; Array [0,1] =“Marc”

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接