假设我们给了一个句子。然后,我们如何按字母顺序排列单词? 例如,
句子:大爆炸理论胜过两个半人。安排的句子:a和Bang更好的一半是人而不是理论二。
我正在考虑通过字母表应用循环并将其与句子进行比较,但我一直感到困惑。我无法想到任何事情。救命啊!
答案 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:
答案 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);
}