我无法弄清楚如何使用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);
}
但是,如果我需要从用户那里分类更多数据怎么办? 感谢。
答案 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)
答案 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);
}
}