Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:以数字方式对字符串数组排序_Java_Arrays_String_Sorting - Fatal编程技术网

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();
集合。排序(条目、比较项);