hasNext() 的问题

Issue with hasNext()

提问人:Alex 提问时间:9/16/2023 最后编辑:OneCricketeerAlex 更新时间:9/16/2023 访问量:66

问:

我对 Scanner 类的 hasNext() 函数有 2 个问题。

我的循环应该有 4 次迭代,但我的循环是无限的。

代码如下:

import java.util.Scanner;

public class main {
    public static void main(String[] args) {
        String t = "Munich     London      Paris   New_York";
        Scanner sc = new Scanner(t);

        while (sc.hasNext()) {
            System.out.println("GOOD");
        }
    }
}

以下是 Oracle 官方文档中 hasNext() 函数的定义:

如果此扫描程序的输入中有另一个标记,则返回 true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进到任何输入。

那么,他们的意思是:“扫描仪不会超过任何输入。

java.util.scanner

评论

0赞 Mr. Polywhirl 9/16/2023
类名应以大写字母开头,即 ,根据 Java 命名约定。Main
8赞 Luatic 9/16/2023
您打电话检查是否有下一个令牌,但您从不打电话实际前进到下一个令牌;你将永远被困在第一个令牌上。sc.hasNext()sc.next()
1赞 Jeppe 9/16/2023
你不是在打电话吗?next()
1赞 Grinding For Reputation 9/16/2023
您希望代码做什么?
0赞 OneCricketeer 9/16/2023
就我个人而言,我会拆分字符串并在数组上循环。如果您不打算调用 next(),是否有特定原因使用 Scanner?

答:

0赞 Mr. Polywhirl 9/16/2023 #1

您需要致电 .此外,请确保使用 .next()\s+

请注意,类名应以大写字母开头。

/* Filename: Main.java */

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String t = "Munich     London      Paris   New_York";
        Scanner sc = new Scanner(t).useDelimiter("\\s+");

        while (sc.hasNext()) {
            System.out.println(sc.next());
        }

        sc.close();
    }
}

结果:

Munich
London
Paris
New_York

评论

1赞 OneCricketeer 9/16/2023
该文件现在也需要重命名为 Main.java
0赞 Grinding For Reputation 9/16/2023
此外,每个单词之间不需要那么多空间。你可以只放一个空格,除非你希望代码更清晰。
0赞 Louis Wasserman 9/16/2023
我本来会投赞成票,但我不相信需要设置不同的分隔符。
0赞 Mr. Polywhirl 9/16/2023
@LouisWasserman是的,对不起。似乎默认分隔符检查所有空格。所以这真的不需要。