当前位置: 首页 > 知识库问答 >
问题:

根据拆分字符串的内容对包含集合的字符串数组进行排序

徐柏
2023-03-14

我有一个字符串数组,中间有一个空白。我想根据空白之前的第一个子字符串对内容进行排序,然后根据空白之后的子字符串对内容进行排序。

例如,如果我的数组如下所示:{“Henry 123”、“Henry 234”、“David 123”、“David 234”},那么最后我需要{“David 123”、“David 234”、“Henry 123”、“Henry 234”}

我尝试在下面实现一个新的比较器:

import java.util.*;

public class MyClass {
    public static void main(String args[]) {
        String[] str_arr = {"Henry 123", "Henry 234", "David 123", "David 234"};

        Collections.sort(str_arr, new Comparator<String>(){
            
            public int compare(String s1, String s2) {
                String[] str1 = s1.split(" ");
                String[] str2 = s2.split(" ");
                if(str1[0].compareTo(str2[0]) != 0) {
                    return str1[0].compareTo(str2[0]);
                }
                return str1[1].compareTo(str2[1]); 
            }            
        });
        
        for (int i = 0; i < str_arr.length; i++) {
            System.out.printf("%s, ", str_arr[i]);
        }
    }
}

但是我得到了这个错误:

MyClass。java:7:错误:找不到合适的排序方法(字符串[],

这个错误听起来像是集合框架不支持排序字符串,这没有多大意义。

共有2个答案

轩辕成天
2023-03-14

您有一个字符串数组,它是集合。sort方法确实不支持排序<代码>集合。排序用于排序列表s。

您应该使用数组。改为排序:

Arrays.sort(str_arr, (s1, s2) -> {
    String[] str1 = s1.split(" ");
    String[] str2 = s2.split(" ");
    int firstPartcomparison = str1[0].compareTo(str2[0]);
    if(firstPartcomparison != 0) {
        return firstPartcomparison;
    }
    return str1[1].compareTo(str2[1]);
});
文自怡
2023-03-14

这里有一种方法

String[] arr = { "Henry 123", "Henry 234", "David 123",
        "David 234" };

Comparator<String> comp =
        Comparator.comparing(s -> s.split("\\s+"),
                Comparator.comparing((String[] a) -> a[0])
                        .thenComparing(a -> a[1]));

Arrays.sort(arr,comp);
System.out.println(Arrays.toString(arr))

印刷品

[David 123, David 234, Henry 123, Henry 234]

如果要将第二个值作为int进行比较,请更改为。

...thenComparingInt(a -> Integer.parseInt(a[1])));

请记住,将数字作为字符串进行比较是词汇而非数字的,因此结果可能会有所不同。例如,将[55,123]作为字符串进行比较将导致[123,55],因为55在词汇上大于123。解决方案不起作用的原因是数组不是集合,这就是集合。sort()需要。

 类似资料:
  • 示例: 我们的名单上有5个名字:凯文、汉斯、弗里茨、汉·索罗、彼得 我现在想要所有在顶部包含“han”的名字。 因此排序后的列表如下所示: Hans,Han Solo,Kevin,Fritz,Peter 到目前为止我所尝试的: 什么都没有,因为我没有线索,但我已经谷歌了,没有找到任何东西。 从列表中删除/添加项目不是一个选项,因为我正在使用(ControlsFX组件)中的列表,其中每个项目都具有会

  • 问题内容: 我正在尝试对字符串列( 包含数字 )进行排序。 您会看到Mysql的自然排序算法放在后面( 对于大多数应用程序来说都可以 ),但是我有独特的需求,因此我希望结果应该像这样排序。 仅使用SQL 是否可能,或者我必须在应用程序级别操纵结果集? 问题答案: 继续 假设 它始终为WORD_space_NUMBER,这应该可行: 使用POSITION查找空间,使用SUBSTRING捕获其后的数字

  • 问题内容: 我正在尝试找到一种将String拆分为String数组的方法,并且每当遇到白色香料时就需要对其进行拆分,例如 “嗨,我是保罗” 进入” “嗨”“我”“保罗” 如何使用RegularExpression在split()方法中表示空格? 问题答案: 您需要一个正则表达式,例如,这意味着: 每当遇到至少一个空格时就进行拆分 。完整的Java代码是:

  • 这个问题类似于我之前的问题拆分一个包含破折号和减号的字符串。但我问错了,然后它得到了稍微不同的语义,人们从这个角度回答(包括)。因此,与其修改这个问题,我认为最好是提出一个新问题。 我必须拆分一个包含连字符-减号和减号的字符串。我尝试根据Unicode字符(https://en.wikipedia.org/wiki/Hyphen#Unicode)进行拆分,但考虑到减号与连字符-减号相同。有什么方法

  • 问题内容: 我目前在一个表格列中有char值,其格式为“ IS-”,然后是1到5个数字,可能的句点可以是2个数字,也可以是一个字母。 示例为IS-1,IS-12,IS-123,IS-123.11,IS-123.a。 我需要分割字符串,以便仅抓取数字部分,对字符串ASC进行排序,然后将字符串重新组合在一起。 解释。我有以下一组值,如您所见,因为IS-1在IS-8之前,所以它们按数字顺序排序。 知道从

  • 问题内容: 我想对具有nr的字符串进行排序。我怎么做? 可以说我的整数是 在主要我做class2.Sort(); 提前致谢。 问题答案: