【问题标题】:Sorting String CompareTo对字符串比较排序
【发布时间】:2015-04-03 05:26:13
【问题描述】:

我是 Java 初学者,我必须编写一个程序,使用命令行输入字符串,然后打印输入的单词数、输入的单词和排序的单词。除了排序,我什么都能做。我知道我必须使用 compareTo,但我不知道如何使该方法起作用。很想得到一些帮助!

到目前为止,这是我的代码:

class Sort{
    public static void main(String args[]){
         int count=args.length;
         System.out.println("\nYou've enetered "+count+" word and they are:");
         for(int i=0;i<count;i++)
         {System.out.print(args[i]+" ");}
         System.out.println("\nThe sorted words are:");
    }
}

【问题讨论】:

  • 可以用Arrays#sort还是自己实现排序算法?
  • 许多现有的 java 机制可以很容易地为您完成此任务,其中最简单的 luiggi 刚刚暗示过
  • 我必须使用String方法 compareTo...
  • 那么你必须实现一个排序算法。你知道排序算法吗?
  • 不是,真的。我真的是个初学者..

标签: java


【解决方案1】:

由于你需要使用compareTo,你可以实现Collections.sort

在您的数组中添加所有值后,只需将此数组与自定义Comparator 一起提供给Collections.sort()。但问题是Collections.sort() 不接受String 数组,因此您还必须使用Arrays.asList(yourArray) 方法将其转换为列表。

假设这是你的数组,

String [] args = new String[]{"dddd","cccc","bbbb", "aaaa"};

现在让我们在将数组转换为列表后使用Collections.sort,并为其提供Comparator

Collections.sort(Arrays.asList(args),new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
});

很简单,不是吗?

如果你现在想打印排序后的值,

for (String p : args ){
    System.out.println(p);
}

输出

aaaa
bbbbb
cccc
dddd

仅供参考,如果您想以相反的顺序排序,请替换 return o1.compareTo(o2)return o2.compareTo(o1)

【讨论】:

    【解决方案2】:

    您可以使用 Arrays.sort 进行排序,使用 Arrays.toString 将给定数组转换为 String:

    class Sort{
        public static void main(String args[]){
            System.out.printf("\nYou've enetered %d words and they are:", args.length);
            System.out.println(Arrays.toString(args));
    
            Arrays.sort(args);
            System.out.println("\nThe sorted words are:");
            System.out.println(Arrays.toString(args));
        }
     }
    

    【讨论】:

    • OP 明确表示他需要使用compareTo(),并且为他做可能是他的家庭作业对他没有任何好处。
    • @Drew sort 使用 comapreTo(...)。当然,您可能是对的,但让 OP 自己提及这一点。
    • @BartKiers 它在问题中说明:我可以做除了排序之外的所有事情。 我知道我必须使用 compareTo,但我不知道如何使该方法起作用。
    • 你打算如何为String 类实现compareTo
    • @LuiggiMendoza,就像我说的那样,很可能是这种情况,但 OP 没有明确提到他/她不能使用内置排序。 OP 可能不知道Arrays.sort(...),这是 事实她/他的意思。再次,这是猜测。让 OP 澄清有什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多