Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Arrays - Fatal编程技术网

Java 先按字母表再按数字对字符串数组排序

Java 先按字母表再按数字对字符串数组排序,java,sorting,arrays,Java,Sorting,Arrays,我有一个字符串数组,我从一个数据库中获取了fileterd,在Java中有这样的输出 [ABCD XYZ M1210, ABCD XYZ M149, ABCD XYZ M5130, ABCD XYZ N1420, ABCD XYZ T11299, ABCD XYZ S11044] 我希望对数组进行如下排序: [ABCD XYZ M149, ABCD XYZ M1210, ABCD XYZ M5130, ABCD XYZ N1420, ABCD XYZ S11044, ABC

我有一个字符串数组,我从一个数据库中获取了fileterd,在Java中有这样的输出

[ABCD XYZ M1210, 
ABCD XYZ M149, 
ABCD XYZ M5130, 
ABCD XYZ N1420, 
ABCD XYZ T11299, 
ABCD XYZ S11044]
我希望对数组进行如下排序:

[ABCD XYZ M149, 
ABCD XYZ M1210, 
ABCD XYZ M5130, 
ABCD XYZ N1420,  
ABCD XYZ S11044,
ABCD XYZ T11299]
这是我特别想要的最后一个元素

 ==> String theStringIWant = myStringArray.get(myStringArray.size() - 1);
我需要做的是首先按字母顺序将字母排序在“XYZ”之后,然后再按数字排序,例如 XYZ XYZ M1210 这里的任何帮助都将不胜感激

*对java等中合适库的任何引用


干杯

您可以使用
集合。排序
对内容进行排序

同时,编写一个比较器进行比较,比如

我写一个比较器

public class MyComparator implements Comparator {

@Override
public int compare(Object o1, Object o2) {

    String s1 = (String)o1;
    String s2 = (String)o2;
    //String part has 10 characters, It is fixed.
    String strPart1 = s1.substring(0,10); 
    int intPart1 = Integer.valueOf(s1.substring(10));

    String strPart2 = s2.substring(0,10);
    int intPart2 = Integer.valueOf(s2.substring(10));

    int strCompareResult = strPart1.compareTo(strPart2);
    if(0 == strCompareResult )
    {
        return intPart1 - intPart2;
    }
    else
    {
        return strCompareResult;
    }
}

}
2使用
集合。排序
和比较器完成排序

    List<String> results = Arrays.asList("ABCD XYZ M1210", "ABCD XYZ M149",
            "ABCD XYZ M5130", "ABCD XYZ N1420", "ABCD XYZ T11299",
            "ABCD XYZ S11044");

    System.out.println("Before sorting... ...");
    System.out.println(results);

    System.out.println("After sorting... ... ");
    Collections.sort(results, new MyComparator());
    System.out.println(results);
分类后

[ABCD XYZ M149, ABCD XYZ M1210, ABCD XYZ M5130, ABCD XYZ N1420, ABCD XYZ S11044, ABCD XYZ T11299]

您可以使用
Collections.sort
对内容进行排序

同时,编写一个比较器进行比较,比如

我写一个比较器

public class MyComparator implements Comparator {

@Override
public int compare(Object o1, Object o2) {

    String s1 = (String)o1;
    String s2 = (String)o2;
    //String part has 10 characters, It is fixed.
    String strPart1 = s1.substring(0,10); 
    int intPart1 = Integer.valueOf(s1.substring(10));

    String strPart2 = s2.substring(0,10);
    int intPart2 = Integer.valueOf(s2.substring(10));

    int strCompareResult = strPart1.compareTo(strPart2);
    if(0 == strCompareResult )
    {
        return intPart1 - intPart2;
    }
    else
    {
        return strCompareResult;
    }
}

}
2使用
集合。排序
和比较器完成排序

    List<String> results = Arrays.asList("ABCD XYZ M1210", "ABCD XYZ M149",
            "ABCD XYZ M5130", "ABCD XYZ N1420", "ABCD XYZ T11299",
            "ABCD XYZ S11044");

    System.out.println("Before sorting... ...");
    System.out.println(results);

    System.out.println("After sorting... ... ");
    Collections.sort(results, new MyComparator());
    System.out.println(results);
分类后

[ABCD XYZ M149, ABCD XYZ M1210, ABCD XYZ M5130, ABCD XYZ N1420, ABCD XYZ S11044, ABCD XYZ T11299]
Arrays.sort(数组,新比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
字符串stringPart1=提取StringPart(s1);
字符串stringPart2=提取StringPart(s2);
int result=stringPart1.compare(stringPart2);
如果(结果==0){
int intPart1=提取INTPART(s1);
int intPart2=提取INTPART(s2);
结果=整数。比较(intPart1,intPart2);
}
返回结果;
}
});
这两种提取方法留作练习。阅读javadoc中有关字符串和/或匹配器的内容,了解如何操作。

Arrays.sort(array,new Comparator()){
@凌驾
公共整数比较(字符串s1、字符串s2){
字符串stringPart1=提取StringPart(s1);
字符串stringPart2=提取StringPart(s2);
int result=stringPart1.compare(stringPart2);
如果(结果==0){
int intPart1=提取INTPART(s1);
int intPart2=提取INTPART(s2);
结果=整数。比较(intPart1,intPart2);
}
返回结果;
}
});
这两种提取方法留作练习。阅读Javadocforstring和/或Matcher,了解如何操作

这是我特别想要的最后一个元素

 ==> String theStringIWant = myStringArray.get(myStringArray.size() - 1);
下面的程序首先提取字符串元素的最后一个整数部分。然后通过比较返回

List<String> results = Arrays.asList("ABCD XYZ M1210", "ABCD XYZ M149",
        "ABCD XYZ M5130", "ABCD XYZ N1420", "ABCD XYZ T11299",
        "ABCD XYZ S11044");

        Collections.sort(results, new Comparator<String>(){

            @Override
            public int compare(String o1, String o2) {
                Integer x1 = Integer.parseInt(o1.substring(o1.lastIndexOf(" ")+2, o1.length()));
                Integer x2 = Integer.parseInt(o2.substring(o2.lastIndexOf(" ")+2, o2.length()));

                return x1.compareTo(x2);

            }
        });

        System.out.println(results);
这是我特别想要的最后一个元素

 ==> String theStringIWant = myStringArray.get(myStringArray.size() - 1);
下面的程序首先提取字符串元素的最后一个整数部分。然后通过比较返回

List<String> results = Arrays.asList("ABCD XYZ M1210", "ABCD XYZ M149",
        "ABCD XYZ M5130", "ABCD XYZ N1420", "ABCD XYZ T11299",
        "ABCD XYZ S11044");

        Collections.sort(results, new Comparator<String>(){

            @Override
            public int compare(String o1, String o2) {
                Integer x1 = Integer.parseInt(o1.substring(o1.lastIndexOf(" ")+2, o1.length()));
                Integer x2 = Integer.parseInt(o2.substring(o2.lastIndexOf(" ")+2, o2.length()));

                return x1.compareTo(x2);

            }
        });

        System.out.println(results);

您是否寻找
集合#排序
?我会制作自己的
比较器
,将字符串分为两部分进行处理。@Pietu1998您能指出任何类似的比较器示例以供参考吗?感谢@RC Cheers的可能副本我会看一看您是否在寻找
集合#排序
?我会制作自己的
比较器
,将字符串分为两部分进行处理。@Pietu1998您能指出任何类似的比较器示例以供参考吗?谢谢@RC Cheers的可能副本我将有一个look@Pietu1998-谢谢你的更正。相应地进行了更改。:)@Pietu1998-感谢您的更正。相应地进行了更改。:)@user1694873请仔细注意输出!它不起作用<代码>XYZ N1420,
出现在
XYZ M5130
之前,这不应该出现。@user1694873请仔细注意输出!它不起作用<代码>XYZ XYZ N1420,
位于
XYZ M5130
之前,但不应位于该位置。