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

时间:2016-01-10 08:34:44

标签: java sorting compareto

我无法弄清楚如何使用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);
} 

但是,如果我需要从用户那里分类更多数据怎么办? 感谢。

5 个答案:

答案 0 :(得分:0)

像Mick Mnemonic所说,使用Java的Collections类和功能。 E.g:

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);
}

这将对下面的列表进行排序:&#34; 根据元素的自然顺序对指定列表按升序排序。&#34; - http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html

无需比较。

答案 1 :(得分:0)

这是一段代码示例,它允许您将多个字符串添加到列表中,然后使用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,因为它的目的是为了做到这一点。要实现这一点,您将使用此方法; 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);
        }
    }
}

答案 2 :(得分:0)

在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);

答案 3 :(得分:0)

你正在寻找这个:

Slider

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

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

答案 4 :(得分:0)

以下工作不使用数组,列表或任何其他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);
    }
}