按字母顺序排列的句子中的单词排列

时间:2015-01-25 16:11:47

标签: java sorting loops stringtokenizer alphabetical-sort

假设我们给了一个句子。然后,我们如何按字母顺序排列单词? 例如,

句子:大爆炸理论胜过两个半人。

安排的句子:a和Bang更好的一半是人而不是理论二。

我正在考虑通过字母表应用循环并将其与句子进行比较,但我一直感到困惑。我无法想到任何事情。救命啊!

3 个答案:

答案 0 :(得分:1)

使用StringTokenizer标记句子并填写列表中的字词。 StringTokenizer对象默认使用字符" \t\n\r\f"(空格字符,制表符,换行符,回车字符和换页符)作为分隔符将句子拆分为令牌。 然后使用不区分大小写的比较器调用Collections#sort(List, Comparator)

String sentence = "Big Bang Theory is better than Two and a Half Men";
StringTokenizer tokenizer = new StringTokenizer(sentence);
List<String> words = new ArrayList<String>();
while(tokenizer.hasMoreTokens()) {
    words.add(tokenizer.nextToken());
}

Collections.sort(words, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o1.compareToIgnoreCase(o2);
    }
});

在上面的代码中,添加了一个自定义比较器,以便在比较两个字符串时使用String.compareToIgnoreCase忽略大小写。如果您不提供自定义比较器,最终会得到一个排序为Bang, Big, Half, Men, Theory, Two, a, and, better, is, than的单词列表。

阅读相关课程的Javadocs:

http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html

Collections.sort的Javadoc:

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List,%20java.util.Comparator)

答案 1 :(得分:0)

你不必手动循环来对数组进行排序(它已经由Arrays排序方法完成)。相反,您可以使用Arrays.sort方法对句子中的每个单词进行排序,方法是按空格分割句子并提供String的内置比较器CASE_INSENSITIVE_ORDER,它将说明您要对数据进行排序的准确程度(按字典顺序比较两个字符串) ,忽略大小写)通过比较一个字符串与另一个字符串。例如,您可以执行以下操作:

String line = "Big Bang Theory is better than Two and a Half Men";
    String[] strArray = line.split(" ");//split by space so we get sentence word by word
    Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
    StringBuilder stringBuilder = new StringBuilder(line.length());//recreate your sentence back.
    for (int i = 0; i < strArray.length - 1; i++) {
        stringBuilder.append(strArray[i]);
        stringBuilder.append(" ");
    }
    stringBuilder.append(strArray[strArray.length - 1]);
    System.out.println(stringBuilder.toString());

答案 2 :(得分:0)

您可以将句子拆分为单词数组,然后使用定义的Comparator类对此数组进行排序:

String sentence = "Big Bang Theory is better than Two and a Half Men";
String [] arr = sentence.split(" ");
Arrays.sort(arr, (String o1, String o2) -> o1.compareToIgnoreCase(o2));
for (String arr1 : arr) {
    System.out.println(arr1);
}