Scanner.next() 不会读取每隔一行的第一个字符

问题描述 投票:0回答:1

为这段代码提供以下输入:

5
0 4 15
1 0 14 2 7 3 23
2 0 7
3 1 23 4 16
4 2 15 3 9

问题是,每当行号为奇数时,第一个整数将不会按预期由“

String newVertexID = inputs.next("\\d+");
”读取,而是由“
System.out.println("next: " + inputs.next("\\d+"))
”读取,即 0、2、4 被分配给 newVertexID,如下所示预期的,但 1, 3 被传递给第二个打印语句,这不是我想要的。

我最初认为这是因为每行末尾的换行符导致了问题,但我已经尝试了很多事情(我注释掉的所有内容都是我尝试过的),我现在已经开始去怀疑它。请帮我找出原因吗?

 Graph graph = new Graph();  
        Scanner inputs = new Scanner(System.in);
        int vertexCounts = inputs.nextInt();
        // inputs.nextLine();
        for (int i = 0; i < vertexCounts; i++){
            // inputs.nextLine();
            inputs.skip("\n");
            String newVertexID = inputs.next("\\d+");
            System.out.println(newVertexID);
            Vertex newVertex = new Vertex(newVertexID);
            graph.addVertex(newVertex);
            while(inputs.hasNextInt()){
                System.out.println("Why are you running");
                System.out.println("next: " + inputs.next("\\d+"));
                System.out.println(inputs.nextInt());
                // graph.addEdge(newVertexID, inputs.next(), inputs.nextInt());
            }
            // inputs.nextLine();

        }

谢谢你

java string java.util.scanner
1个回答
0
投票

像这样尝试一下。这是使用两个扫描仪有用的少数情况之一,一个用于读取该行,另一个用于解析该行。我添加了一些输出增强功能。

Scanner inputs = new Scanner(System.in);
int vertexCounts = inputs.nextInt();
inputs.nextLine();  // remove extra cr in input buffer.
System.out.println(vertexCounts);
for (int i = 0; i < vertexCounts; i++){
    String line = inputs.nextLine();
    System.out.println(line);
    Scanner parseLine = new Scanner(line.trim());
    int vertexID = parseLine.nextInt();
    System.out.println("vertexID = " + vertexID);
 
    while(parseLine.hasNextInt()){
        System.out.println("Why are you running");
        System.out.println("next: " + parseLine.nextInt());
        // graph.addEdge(newVertexID, inputs.next(), inputs.nextInt());
    }

}     

© www.soinside.com 2019 - 2024. All rights reserved.