Java Scanner - 使用next()后如何返回到最后一个单词

时间:2012-05-13 21:39:22

标签: java string java.util.scanner

我目前有一个If语句,用于检查文档中的下一个单词是否等于某个长度。在它返回true之后,我希望它将该单词添加到数组或字符串等。我的问题是,一旦我使用next()命令,它就会继续到文档中的下一个值,即使我在条件中使用它如果声明。我对Java有些新意,所以我希望这个简单的点击是有道理的。

Scanner in1 = new Scanner(inputFile);
String inputString;

while(in1.hasNextLine()){
     if(in1.next().length() == 6){
          inputString = in1.next();
     }
}

基本上我有一个包含多个单词的文件,在多行上都有不同的长度。我想要抓住其中包含6个字符的单词。实际的while循环和文件更复杂,问题是它在评估If语句后跳转到下一个单词。因此,如果它检测到下一个单词有6个字符,它会将后面的单词加载到变量中。欢迎任何帮助或建议!

2 个答案:

答案 0 :(得分:2)

next()的值捕获到变量中,进行比较,将inputString设置为该变量。如果长度不正确,接下来的任何内容都可以使用相同的变量,从而避免额外的next()。不确定这是否符合您的需要。

答案 1 :(得分:2)

您可以将此循环拆分为两部分:

  1. 获取下一个令牌并存储它,
  2. 使用该缓存令牌。
  3. 例如:

    while(in1.hasNextLine()) {
         String current = in1.next();
         if(current.length() == 6) {
              inputString = current;
         }
    }
    

    这是使用迭代器或扫描仪时的标准技术,正是您所注意到的原因 - next()方法无法多次调用而不会生成不同的值。

    顺便说一句,其他编程语言已经设计了它们的迭代器,以便获得迭代的值并前进到下一个位置是单独的步骤。值得注意的是,C ++ STL认为这些是不同的操作。

    希望这有帮助!