Java:以数字方式对字符串数组排序
我有一个字符串数组,其中包含以下条目:Java:以数字方式对字符串数组排序,java,arrays,string,sorting,Java,Arrays,String,Sorting,我有一个字符串数组,其中包含以下条目: Array[0] = "70% Marc" Array[1] = "50% Marc" Array[2] = "100% Marc" Array[3] = "20% Marc" 我想对这个数组进行降序排序。 当我使用Array.sort(Array)时,它会按降序排序,但100%Marc位于底部(因为它只查看排序的第一个字符)。我想把它分类如下: "100% Marc" "70% Marc" "50% Marc" "20% Marc" List<
Array[0] = "70% Marc"
Array[1] = "50% Marc"
Array[2] = "100% Marc"
Array[3] = "20% Marc"
我想对这个数组进行降序排序。
当我使用Array.sort(Array)
时,它会按降序排序,但100%Marc
位于底部(因为它只查看排序的第一个字符)。我想把它分类如下:
"100% Marc"
"70% Marc"
"50% Marc"
"20% Marc"
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);
我该怎么做呢?您必须使用自定义设置。基本上,在您的方法
compare()
中,您将编写逻辑以订购两个String
s。编写您自己的CustomStringComparator
并将其与排序方法一起使用
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;
}
}
公共类CustomStringComparator实现Comparator{
@凌驾
公共整数比较(字符串str1、字符串str2){
//从字符串中提取数字部分并将其转换为int
//比较一下,大致是这样的
int num1=Integer.parseInt(str1.substring(0,str1.indexOf(“%”-1));
int num2=Integer.parseInt(str2.substring(0,str2.indexOf(“%”-1));
返回num1-num2;
}
}
您需要实现一个自定义的比较器
,该比较器通过删除百分号来处理比较:
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
}
public int比较(字符串str1、字符串str2){
整数number1=Integer.parseInt(str1.substring(0,str1.length-1));
整数number2=Integer.parseInt(str1.substring(0,str2.length-1));
返回编号1。比较(编号2);
//或者使用原语,然后:return(x
比较本身可以通过使用Integer
包装器、我粘贴的代码(取自包装器)或番石榴的Ints.compare(int1,int2)
然后使用Collections.sort(array,comparator)它不是查看第一个字符,而是基于字符串值进行排序,因为这是数组中的值 我建议存储两个字段 数组[0,0]=50; 数组[0,1]=“Marc”
然后根据数字字段进行排序,如果这是您所追求的行为。您将需要一个自定义比较器:
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);
}
}
import java.util.Comparator;
公共类CustomComparator实现了Comparator{
@凌驾
公共整数比较(字符串第一个字符串,字符串第二个字符串){
int number1=Integer.parseInt(firstString.substring(0,firstString.indexOf('%'))-1);
int number2=Integer.parseInt(secondString.substring(0,secondString.indexOf('%'))-1);
返回编号1。比较(编号2);
}
}
将此比较器与以下内容一起使用:
"100% Marc"
"70% Marc"
"50% Marc"
"20% Marc"
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);
List entries=new ArrayList();
条目。添加(“70%Marc”);
条目。添加(“50%Marc”);
条目。添加(“100%Marc”);
条目。添加(“20%Marc”);
CustomComparator comparator=新CustomComparator();
集合。排序(条目、比较项);