如何使用 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);
}
}
我不知道如何使用 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);
}
}