[英]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.