Java 扫描仪 useDelimiter() 语法错误

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

我环顾四周,但找不到任何有帮助的东西。基本上我正在编写一段代码来获取数字列表作为输入。但是我想要用逗号作为分隔符输入数字。

这是我的代码片段。

import java.util.Scanner;

public class TreeUtils {
    Scanner inputTreeOne = new Scanner(System.in);
    Scanner inputTreeTwo = new Scanner(System.in);

    //Changing default whitespace delimiter of Scanners to comma.
    inputTreeOne.useDelimiter(","); 

}

我遇到的问题是 useDelimiter() 方法存在语法错误。错误如下(来自eclipse):

Multiple markers at this line
    - Syntax error on token "","", delete this token
    - Syntax error on token(s), misplaced 
     construct(s)

谢谢。 P.S 我是新注册的,所以我不确定这是否是正确的提问方式。希望一切都好。

java java.util.scanner
3个回答
2
投票

你的代码很好,但你似乎把它放错了你的班级中。

检查你放置代码的位置,它应该放置在构造函数、方法中,或者 - 在你的情况下不太可能 - 静态初始化块。

private void foobar() {

  // Do some cool stuff...

  Scanner inputTreeOne = new Scanner(System.in);
  Scanner inputTreeTwo = new Scanner(System.in);

  // Changing default whitespace delimiter of Scanners to comma.
  inputTreeOne.useDelimiter(",");

  // Do some other stuff...

}

2
投票

代码片段本身没问题,但你放错了地方。您没有在类中定义方法。

像这样再试一次:

public static void main(String[] args) {
  Scanner inputTreeOne = new Scanner(System.in);
  inputTreeOne.useDelimiter(",");
  while (inputTreeOne.hasNext()) {
    System.out.println(inputTreeOne.next());
}

}


2
投票

您还没有包含足够的代码来确定(更新 - 您现在已经有了),但我希望您将这些声明放在类的顶层;即不在方法内。

例如这样:

import java.util.Scanner;
public class Test {
    Scanner inputTreeOne = new Scanner(System.in);
    Scanner inputTreeTwo = new Scanner(System.in);

    inputTreeOne.useDelimiter(","); 
    ....
}

前两个声明在语法上是正确的。

您拨打

useDelimiter
的线路不正常。这是一个语句而不是声明,并且您不能将语句放在类的顶层。

为什么?因为Java语法不允许!

您很可能需要在构造函数中设置扫描仪......

例如:

import java.util.Scanner;
public class Test {
    Scanner inputTreeOne = new Scanner(System.in);
    Scanner inputTreeTwo = new Scanner(System.in);

    public Test() {
        inputTreeOne.useDelimiter(","); 
    }
    ....
}

或者也许将所有三行放在一个方法中更合适。


我还应该注意,为同一输入流创建两个单独的扫描仪“可能”是不正确的。您可能会因“错误”扫描仪缓冲的前瞻字符而陷入各种麻烦。 使用单个扫描仪,并且(如果需要)设置和重置

nextXxxx

调用之间的分隔符,等等。

    

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