如何使用 compareTo() 方法按字母顺序对字符串(超过 2 个变量)进行排序?

How to sort String (more than 2 variables) alphabetically using compareTo() method?

我不知道如何使用 compareTo() 方法对字符串(超过 2 个)进行排序。对于 2,我正在这样做:

Scanner input = new Scanner(System.in);

String name1 = input.nextLine();
String name2 = input.nextLine();

if(name1.compareTo(name2) < 0)
{
    System.out.println(name1 + "\n" + name2);
}
else
{
    System.out.println(name2 + "\n" + name1);
} 

但是如果我需要对用户的更多数据进行排序怎么办? 谢谢

如 Mick Mnemonic 所说,使用 Java 的 Collections 类 和功能。例如:

List<String> list = new ArrayList<>();
Scanner input = new Scanner(System.in);

//This should be a do-while list
list.add(input.nextLine());
list.add(input.nextLine());

Collections.sort(list);

for(String s: list) {
    System.out.println(s);
}

这将按如下方式对列表进行排序:“根据其元素的自然顺序将指定列表按升序排序。”- http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html

不需要 compareTo。

这是一段示例代码,它允许您将多个字符串添加到列表中,然后使用 Java 的默认比较器对它们进行排序。

import java.util.*;

public class Test
{
    public static void main(String[] args)
    {
        boolean continueLoop = true;
        List<String> myStringList = new ArrayList<String>();
        Scanner input = new Scanner(System.in);

        System.out.println("Please eneter a string");
        myStringList.add(input.nextLine());
        System.out.println();

        System.out.println("Please eneter a second string");
        myStringList.add(input.nextLine());
        System.out.println();

        while(continueLoop) {

            System.out.println("Would you like to add another string");
            System.out.println("Enter Yes to add another string");
            System.out.println("Enter No to sort the strings");
            System.out.println();
            String yesOrNo = input.nextLine();
            if(yesOrNo.equalsIgnoreCase("Yes")) {
                System.out.println();
                System.out.println("Please enter another string");
                myStringList.add(input.nextLine());
                System.out.println();
            } else {
                continueLoop = false;
                System.out.println();
            }
        }

        Collections.sort(myStringList);

        System.out.println("Sorted Strings");
        for(String s : myStringList) {
            System.out.println("  " + s);
        }
    }
}

如果您的字符串包含数字,并且您想对它们进行正确排序,我建议您看一下 this comparator since it has been designed to do that. To implement this you would use this method; Collection.sort

Collections.sort(myStringList, new AlphanumComparator());

编辑

对于特定数量的字符串,您可以使用以下代码

import java.util.*;

public class Test
{
    public static void main(String[] args)
    {
        boolean continueLoop = true;
        List<String> myStringList = new ArrayList<String>();
        Scanner input = new Scanner(System.in);

        System.out.println("Please eneter how many strings you will enter");
        int j = Integer.parseInt(input.nextLine());
        System.out.println();

        for(int i=0;i<j;i++) {
            System.out.println("Please eneter a string");
            myStringList.add(input.nextLine());
            System.out.println();
        }

        Collections.sort(myStringList);

        System.out.println("Sorted Strings");
        for(String s : myStringList) {
            System.out.println("  " + s);
        }
    }
}

在java中,如果要对多个字符串项进行排序,应该将它们放在一个容器中,通常是一个字符串列表(也可以使用数组)。

话不多说,给你看代码,这是一个排序 5 个字符串的例子。

    Scanner input = new Scanner(System.in);

    List<String> stringList = new ArrayList<String>();
    for (int i = 0; i < 5; i++) {  //exact number of string
        stringList.add(input.nextLine());
    }

    System.out.println("before sort:" + stringList);
    Collections.sort(stringList);
    System.out.println("after sort:" + stringList);

更新:

如果你不想使用Java集合框架的排序,如果你真的想手动使用compareTo(),你应该实现一个排序算法。听到的是一个使用 bubble sort 的例子(但手动使用 compareTo() 进行排序不是最佳做法)。

    Scanner input = new Scanner(System.in);

    List<String> list = new ArrayList<String>();
    for (int i = 0; i < 5; i++) {   //exact number of string
        list.add(input.nextLine());
    }

    System.out.println("before sort:" + list);

    //bubble sort start
    String temp;
    int length = list.size();
    for (int i = 0; i < length - 1; i++) {
        for (int j = 0; j < length - 1 - i; j++)
            if (list.get(j).compareTo(list.get(j + 1)) > 0) {  //compareTo method
                temp = list.get(j);
                list.set(j, list.get(j + 1));
                list.set(j + 1, temp);
            }
    }
    //bubble sort end

    System.out.println("after sort:" + list);

您正在寻找的可能是:

    String[] arr = {"zsdsfc", "aazjkjf", "aabdd"};

    System.out.println("Before:" + "\n");

    for (int i = 0; i < arr.length; i++ ){

        System.out.println(arr[i]);
    }

    System.out.println();

    for (int i = 0; i < arr.length; i++ ){

        for (int j = 0; j < arr.length; j++){

            if(arr[i].compareTo(arr[j]) < 0){

                String keeper = arr[i];
                arr[i] = arr[j];
                arr[j] = keeper;
            }
        }
    }

    System.out.println("After:" + "\n");

    for (int i = 0; i < arr.length; i++ ){

        System.out.println(arr[i]);
    } 

A.CompareTo(B) 方法 returns 如果 A 大于 B,则为负数;如果 A 等于 B,则为零;如果 B 大于 A,则为正数。

您可以在此处查看 CompareTo(String)

以下工作无需使用数组、列表或任何其他 Collection,假设您先验地知道要比较的字符串的数量。这将比较 5 String 个值:

//use a max value for comparisons
private static final String MAX_STRING = String.valueOf(Character.MAX_VALUE); 

public static void compareMe(String a, String b, String c, String d, String e) {
    if (a.compareTo(b) <= 0) {
        if (a.compareTo(c) <= 0) {
            if (a.compareTo(d) <= 0) {
                if (a.compareTo(e) <= 0) {
                    if (a != MAX_STRING) {
                        System.out.println(a);
                        a = MAX_STRING;
                    } else {
                        return;
                    }
                }
                //swap (a,e)
                compareMe(e, b, c, d, a);
            } else {
                //swap (a,d)
                compareMe(d, b, c, a, e);
            }
        } else {
            //swap (a,c)
            compareMe(c, b, a, d, e);
        }
    } else {
        //swap (a,b)
        compareMe(b, a, c, d, e);
    }
}