簡體   English   中英

Java:以數字方式對字符串數組進行排序

[英]Java: Sort a String array in a numeric way

我有一個包含以下條目的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<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;

    }
}

您必須使用自定義的Comparator 基本上,在方法compare()您將編寫對兩個String排序的邏輯。

您將需要一個自定義比較器:

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

您需要實現一個自定義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包裝器,我粘貼的代碼(從包裝器中獲取)或番石榴的Ints.compare(int1, int2)

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

它不是在看第一個字符,而是根據字符串值進行排序,因為這就是數組中的內容。

我建議存儲兩個字段,

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

然后,如果要這樣做,則根據數字字段進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM