【问题标题】:Sorting a String by its 6 first characters按字符串的前 6 个字符对字符串进行排序
【发布时间】:2017-10-28 20:53:27
【问题描述】:

我有以下格式的 ID:XXXXXXYYY00000

我要做的是让单个字符串按字母顺序排列,由前 6 个字符(6 个 x(它们可以是任何字符))组成,每个新 ID 由换行符分隔

例如:

AOPSIKPMI23495 会先于 BWLMBEPMI00001

到目前为止我所拥有的是:

String = String + this.ID + "\n";

而且我不知道如何解决我的问题以解决它。

我的问题如下:我如何按字母顺序组织我的 ID,仅按其前 6 个字符(这意味着如果与前 6 个字符有联系,它仍然不应该用接下来的 3 个字符来解决它)并且仍然保留我的字符串?

【问题讨论】:

  • 我对这个问题投了反对票,因为它是一个零努力的需求转储。如果您可以 edit 您的问题向我们展示您的尝试 Minimal, Complete, and Verifiable example,或准确地澄清您遇到困难的地方,此反对票可能会被撤回。
  • 按前六个字符排序是什么意思?只需对字符串进行排序,根据定义,它们也将按前六个字符排序
  • 最可能的答案是通过前缀使用流和分组。
  • 按前六个字符排序意味着如果我“只排序”,它也会考虑接下来的三个字符。这不是我想要的,也是我为什么希望它按前六个字符的字母顺序排序的原因。这也是为什么我不仅要求对它进行排序,而且还增加了精度。
  • 在平局的情况下只会考虑接下来的 3 个字符。如果这不是您想要的,您需要在问题中指定如果有关系,您希望发生什么。

标签: java string sorting alphabetical-sort


【解决方案1】:

您可以按前 6 个字符对列表进行排序,然后使用Collectors.joining 将每个字符串用"\n" 分隔符分隔。

String result = myList.stream().sorted(Comparator.comparing(e -> e.substring(0,6)))
                               .collect(Collectors.joining("\n"));

【讨论】:

  • 我接受了这个答案,但想问这里的“e”是什么。
  • e 是表示当前字符串对象的标识符。有关 lambdas 的介绍,请参阅 callicoder.com/java-lambda-expression-tutorial
  • 我的错,我以为不是。
【解决方案2】:

您可以简单地实现一个比较器来比较前 6 个字符:

class FirstSixCharComparator implements Comparator<String> {
    @Override
    public int compare(String a, String b) {
        return a.substring(0,6)compareTo(b.substring(0,6));
    }
}

然后使用比较器进行排序:

Collections.sort(list, new FirstSixCharComparator<String>());   //for collections    
Arrays.sort(array, new FirstSixCharComparator<String>());       //for arrays

【讨论】:

    【解决方案3】:

    这段代码应该可以解决你的问题,如果不是,那么我们可以编写比较器类的东西来满足你对它的任何要求。

        import java.util.ArrayList;
        import java.util.Collections;
        import java.util.List;
    
    public class Sample {
    
        public static void main(String[] args) {
            List<String> words = new ArrayList<String>();
            words.add("AOPSIKDDD23495");
            words.add("BWLMBEPMI00001");
            Collections.sort(words);
            System.out.println(words);      
        }
    
    }
    

    【讨论】:

    • 问题是您的建议不能解决我遇到的主要问题:仅按前 6 个字符排序。如果前 6 个字符相等,后面三个不相等,则这两个字符不应该特别排序,因为前 6 个字符相同。
    • 好吧,以这个样本集为例,[AOPSIKDDD23495, AOPSIKMMM23495, AOPSIKZZZ23495] 告诉我你期望的输出是什么
    猜你喜欢
    • 2011-01-18
    • 2022-11-25
    • 2021-06-10
    • 1970-01-01
    • 2013-01-02
    • 2018-07-02
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多