使用扫描仪

时间:2015-04-24 23:56:42

标签: java

我正在进行一项任务,我必须在使用扫描仪读取的文件中找到按字母顺序排列的最后一个单词。我查找的大多数示例建议使用数组或数组列表,但我不能在此部分使用数组或数组列表,因此集合是不可能的。所以我一直在尝试使用compareTo()来按字典顺序比较字符串。到目前为止,我有类似的东西:

while (read.hasNext()) {
    String s = read.next().toLowerCase();
    }

现在我的问题是如何在这种情况下实现比较?我尝试过像

这样的事情
 if (string1.compareTo(string2) < 0) {
     lastWord = string1
}

但是我在创建两个不同的字符串时遇到了麻烦。任何想法或提示都会非常有用。

3 个答案:

答案 0 :(得分:0)

您可以使用String#compareToIgnoreCase。根据文件,你必须要小心:

  

请注意,此方法不考虑区域设置,并且会导致某些区域设置的排序不合格

如果区域设置比较很重要,use Collator#compare。迭代就像你的while()循环一样,运行比较,如果它大于零,那么这将是你当前按字母顺序排列的最后一个单词。存储它直到达到另一个最后一个单词。

答案 1 :(得分:0)

也许是这样的:

String lastWord = "";
while (read.hasNext()) {
    String s = read.next().toLowerCase();
    if (lastWord.compareTo(s) < 0)
        lastWord = s;
}

或者考虑到@ Ulvon的建议,你可以保持字符串不变。

String lastWord = "";
while (read.hasNext()) {
    String s = read.next();
    if (lastWord.compareToIgnoreCase(s) < 0)
        lastWord = s;
}

N.B。我还没有编译任何解决方案,所以语法可能不太正确。

答案 2 :(得分:0)

你快到了。

我想发表评论,但似乎我没有足够的声誉。

您只需保存一个中立的lastWord即可。在迭代文件内容之前。

String lastWord = "";
while (read.hasNext()) {
    String s = read.next();
    if (lastWord.compareToIgnoreCase(s) < 0 || lastWord.equals(""))
        lastWord = s;
}