按字母顺序对Java中的句子进行排序

时间:2013-08-08 22:34:17

标签: java list

我完成了按字母顺序排列单词的程序,但我试图按字母顺序排列整个句子...或段落......或故事。几乎任何你投入的东西。

到目前为止,这是我的代码:

package Main;


import java.io.Console;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;

public class ABCs2
{    
    public static final void main(String args[])
    {
        Scanner a = new Scanner(System.in);
        char reply;
        String r1, r2, r3, r4;
        String s1;

        System.out.print("Alphabetize words: W | or press S to sort sentence..");
        reply = a.findWithinHorizon(".", 0).charAt(0);
        if (reply == 'W' || reply == 'w')
        {
            System.out.print("Enter word 1");
            r1 = a.next();

            System.out.print("Enter word 2");
            r2 = a.next();

            System.out.print("Enter word 3");
            r3 = a.next();

            System.out.print("Enter word 4");
            r4 = a.next();

            List<String> list = new ArrayList<>();
            list.add(r1);
            list.add(r2);
            list.add(r3);
            list.add(r4);

            System.out.println("Alphabetizing...");
            try
            {
                Thread.sleep(2000);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }

            java.util.Collections.sort(list);

            System.out.println("Your alphabetized list:");
            System.out.println(list);

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

        if (reply == 'S' || reply == 's')
        {
            System.out.println("Enter sentence..."); 
            s1 = a.next();

            List<String> slist = new ArrayList<>();
            slist.add(s1);
            System.out.println("Alphabetizing...");
            try
            {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();        
            }

            java.util.Collections.sort(slist); 

            System.out.println("Your alphabetized sentence...");
            System.out.println(slist);
        }
    }
}

我想输出一个完整的按字母顺序排列的句子,但我只是得到第一个单词。我甚至需要使用清单吗?谢谢!我不需要它完全回答,只是朝着正确的方向迈出了一步!

2 个答案:

答案 0 :(得分:3)

    {;{}

?? 我不确定上面代码中这一行的用途。

但是关于你的问题,Scanner的next()方法会在字符串中获得下一个标记,就是这样。换句话说,它将获得String中的第一个单词,直到下一个空格字符。您将需要使用nextLine()获取整个String,然后使用String的split()方法将其拆分,然后对返回的String数组进行排序。

您的问题显示了调试类似问题的重要性。如果在将String添加到列表之前打印了String,则已经确定了问题。尝试使用临时测试println语句(或使用调试器)来填充代码以尝试识别错误,然后从最终代码中删除println。你做的调试尝试越多,就会越好。

换句话说,你会尝试这样的事情:

System.out.println("Enter sentence..."); 
s1 = a.next();

System.out.println("Debug, s1 = " + s1);  // TODO: delete this line

List<String> slist = new ArrayList<>();
slist.add(s1);

答案 1 :(得分:0)

我使用应用程序对标题进行排序: 我知道你不是在存储书籍,这是为了演示如何订购任何长度的String对象。

创建一个你想要排序的对象类型的类或内部类,对我来说它是书籍:

class Book {
   String title;
   public Book(String t) {
       title = t;
   }

您还可以覆盖toString()以更改存储字符串的对象类中显示的方式(即缩进,下一行调用等)。

为您的主类创建一个内部类,如下所示:

class BookCompare implements Comparator<Book> {
    public int compare(Book one, Book two) {
        return one.title.compareTo(two.title);
    }
}

实例化实现Comparator的类。

您现在可以使用LinkedList之类的东西来存储book的实例:

LinkedList<Book> bookList = new LinkedList <>();

将您的句子添加到链接列表中:

bookList.add(new Book("Whatever you want the string to be"));

现在使用Collections.sort()方法和Comparing类按字母顺序排序:

Collections.sort(bookList,instanceOfCompareClass);

当显示对象时,它将是您在toString()方法中定义的方式,它们将按字母顺序排列。

我知道你没有订购书籍,但这是使用Comparator和我已编写的代码的一个例子。希望这对你有所帮助。祝你好运。

附加说明:您需要导入java.util。*才能使用Comparator接口。