首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中按字母顺序对句子进行排序

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

Stack Overflow用户
提问于 2013-08-09 06:34:17
回答 2查看 2.8K关注 0票数 1

我完成了按字母顺序排列单词的程序,但我正在尝试按字母顺序排列整个sentence...or paragraph...or故事。几乎所有你扔给它的东西。

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

代码语言:javascript
复制
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);
        }
    }
}

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

EN

回答 2

Stack Overflow用户

发布于 2013-08-09 06:37:16

代码语言:javascript
复制
    {;{}

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

但是对于您的问题,扫描器的next()方法将获得字符串中的下一个令牌,仅此而已。换句话说,它将获取字符串中的第一个单词,直到下一个空格字符。您需要使用nextLine()获取整个字符串,然后使用String的split()方法将其拆分,然后对返回的字符串数组进行排序。

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

换句话说,您可以尝试如下所示:

代码语言:javascript
复制
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);
票数 3
EN

Stack Overflow用户

发布于 2013-08-09 06:49:26

我用一个按标题对图书进行排序的应用程序做到了这一点:我知道您没有存储图书,这是为了演示如何对任意长度的字符串对象进行排序。

创建一个要排序的对象类型的类或内部类,对我来说是books:

代码语言:javascript
复制
class Book {
   String title;
   public Book(String t) {
       title = t;
   }

您还可以重写toString()来更改它在存储字符串的对象的类中的显示方式(即缩进、下一行调用等)。

在主类中创建一个内部类,如下所示:

代码语言:javascript
复制
class BookCompare implements Comparator<Book> {
    public int compare(Book one, Book two) {
        return one.title.compareTo(two.title);
    }
}

实例化实现比较器的类。

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

代码语言:javascript
复制
LinkedList<Book> bookList = new LinkedList <>();

将你的句子添加到链表中,如下所示:

代码语言:javascript
复制
bookList.add(new Book("Whatever you want the string to be"));

现在将Collections.sort()方法与比较类一起使用,按字母顺序对它们进行排序:

代码语言:javascript
复制
Collections.sort(bookList,instanceOfCompareClass);

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

我知道您不是在订购书籍,但这是一个将比较程序与我已经编写的代码一起使用的示例。希望这对你有帮助。祝你好运。

附加注意:您需要导入java.util.*以使用比较器接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18137344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档