0

我有两个来自用户的名字。

我想比较它们并按字母顺序显示它们。

我尝试了 compareTo 方法,但它只返回一个 int。

编辑:找到答案!再次感谢各位!

4

6 回答 6

4

你说:“我必须命名”——假设你的意思是“我有两个名字”......

如果您有两个字符串,那么您只有两种可能的方式可以返回它们。它可以是 A、B 或 B、A。这两个字符串的排序方式只有三种。

任何一个:

  • 第一个字符串在第二个字符串之前(按原样返回)
  • 第二个字符串在第一个字符串之前(交换它们,然后返回)
  • 两个字符串相等(以任何顺序返回它们,没关系)

事实证明,根据Java 文档,该String.compareTo()方法实际上为您提供了一个映射到这三种可能状态的值:

如果此 String 对象按字典顺序位于参数字符串之前,则结果为负整数。如果此 String 对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,则结果为零;当 equals(Object) 方法返回 true 时,compareTo 返回 0。

于 2009-10-20T23:49:34.420 回答
0

最简单的方法是将它们存储在一个数据结构中,例如TreeSet它固有地对它们的内容进行排序(通常通过compareTo内部调用)。

否则,还有Collections.sort静态方法对现有的List.

于 2009-10-20T23:45:10.653 回答
0

Java 内置了一些排序方法。尝试将名称放入数组并使用Array sort

于 2009-10-20T23:45:50.370 回答
0

您需要对它们进行排序( compareTo 方法为排序算法提供了它需要知道什么在什么之前发生的信息)。要对它们进行排序,您需要将它们放在 List 中,然后使用 Collections.sort() 方法。

于 2009-10-20T23:46:41.353 回答
0

这是一个给你的例子,假设你有两个以上的名字,尽管它也适用于这个:

   // Create a list
    String[] strArray = new String[] {"z", "a", "C"};
    List list = Arrays.asList(strArray);

    // Sort
    Collections.sort(list);
    // C, a, z

    // Case-insensitive sort
    Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
    // a, C, z

    // Reverse-order sort
    Collections.sort(list, Collections.reverseOrder());
    // z, a, C

    // Case-insensitive reverse-order sort
    Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
    Collections.reverse(list);
    // z, C, a
于 2009-10-20T23:46:44.473 回答
0

如果您只有两个名称,请使用 compareTo() 方法。如果您有很多,请使用其他解决方案(将它们添加到列表并对其进行排序)。

总是喜欢“Arrays.asList(strArray);” 到“new ArrayList()”,当不可能时,为了性能,在构造函数上指定列表大小。

于 2009-10-21T08:11:43.047 回答