查找使用扫描仪读取的文件中按字母顺序排列的最后一个单词



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

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

现在我的问题是在这种情况下我将如何实现?我尝试做类似的事情

 if (string1.compareTo(string2) < 0) {
     lastWord = string1
}

但是我在创建两个不同的字符串进行比较时遇到问题。任何想法或提示都会非常有帮助。

也许是这样的:

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;
}

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

您可以使用 String#compareToIgnoreCase。您必须小心,因为根据文档:

请注意,此方法不考虑区域设置,并且将导致某些区域设置的排序不令人满意

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

你快到了。

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

您所需要的只是保存一个中性lastWord。在迭代文件内容之前。

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

最新更新