Java 如果我';我在用分隔符吗?

Java 如果我';我在用分隔符吗?,java,java.util.scanner,Java,Java.util.scanner,我试图创建一个无向图,其中一些节点(并非所有节点,与我的示例不同)相互连接。所以我的输入格式如下 3 1:2,3 2:1,3 3:1,2 意思是总共有三个节点,1连接到2和3,2连接到1和3,依此类推 然而,我无法理解如何以有意义的方式接受输入。这是我到目前为止得到的 public Graph createGraph() { Scanner scan = new Scanner(System.in).useDelimiter("[:|,|\\n]"); int graphSiz

我试图创建一个无向图,其中一些节点(并非所有节点,与我的示例不同)相互连接。所以我的输入格式如下

3
1:2,3
2:1,3
3:1,2
意思是总共有三个节点,1连接到2和3,2连接到1和3,依此类推

然而,我无法理解如何以有意义的方式接受输入。这是我到目前为止得到的

public Graph createGraph() {
    Scanner scan = new Scanner(System.in).useDelimiter("[:|,|\\n]");
    int graphSize = scan.nextInt();
    System.out.println(graphSize);
    for (int i = 0; i < graphSize; i++) {
        while (!scan.hasNext("\\n")) {
            System.out.println("Scanned: " + scan.nextInt());
        }
    }
    return new Graph(graphSize);

}

当我在新行字符上使用分隔符时,是否看到它?

是的,扫描仪肯定能检测到新行。事实上,您甚至不必显式地指定它。只用

scan.hasNextLine()
只要你的输入中有行,它就会一直运行

编辑


为什么不先阅读所有内容,然后使用for循环?

在我看来,如果这些分隔符是有意义的标记,就不应该使用它们。例如,在第二行中,第一个整数的含义与其他整数的含义不同,因此
有意义,应该进行扫描,即使只是在以后丢弃<但是,code>,不会改变由它分隔的标记的含义,因此它可以安全地用作分隔符:您可以获取整数,只要它们由
分隔,它们仍然具有相同的含义


总之,我会使用
作为分隔符,并手动检查
\n
,这样当我遇到它们时,我可以调整我的代码行为。

好吧,我找到了答案。这不是我写过的最漂亮的代码,但它完成了任务

public Graph createGraph() {
    Scanner scan = new Scanner(System.in);
    number = scan.nextLine();
    graphSize = Integer.valueOf(number);
    System.out.println(graphSize);
    for (int i = 0; i < graphSize; i++) {
        number = scan.nextLine();
        Scanner reader = new Scanner(number).useDelimiter(",|:");
        while (reader.hasNextByte()) {
            System.out.println("Scanned: " + reader.nextInt());
        }
    }
    return new Graph(graphSize);

}
public Graph createGraph(){
扫描仪扫描=新扫描仪(System.in);
number=scan.nextLine();
graphSize=整数。valueOf(数字);
System.out.println(图形化);
for(int i=0;i
分隔符用于将字符串拆分为令牌,并在过程中丢失。如果令牌对您有意义,您不应该将其用作分隔符我已经尝试过了,但是如果我将换行符保留在分隔符之外,第一个数字就不会被输入。您希望输入本身包含一个换行符吗?我不确定我是否理解您的问题。如果我把换行符从分隔符中去掉,那么我的第一个数字(3)就永远不会被取出来,因为它与下一行的1没有任何区别。是的,我知道,但我希望while循环在每一行之后结束,而不是一直持续到我结束输入。嗯,那么你希望while循环在每一行之后结束吗?那么,如果循环在第一行之后结束,您将如何解析其余的行呢?我的while循环位于for循环的内部,该循环会对任意多个节点进行迭代,因此当while循环结束时,for循环将再次循环,直到所有节点都被占用。嗯,那么您想读取一行,做一些处理,然后从你离开的地方取回?首先读取所有内容,然后迭代for循环不是更好吗?例如,只需将所有内容存储在字符串列表中。然后再重复这个列表?您是从文件还是从控制台获取输入?我最终会这样做,这样我的输入将来自其中任何一个。但出于测试目的,我只是在标准输入中输入。
public Graph createGraph() {
    Scanner scan = new Scanner(System.in);
    number = scan.nextLine();
    graphSize = Integer.valueOf(number);
    System.out.println(graphSize);
    for (int i = 0; i < graphSize; i++) {
        number = scan.nextLine();
        Scanner reader = new Scanner(number).useDelimiter(",|:");
        while (reader.hasNextByte()) {
            System.out.println("Scanned: " + reader.nextInt());
        }
    }
    return new Graph(graphSize);

}