Java Scanner useDelimiter()语法错误

时间:2015-03-05 09:53:41

标签: java java.util.scanner

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

这是我的代码段。

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我刚刚在这里注册,所以我不确定这是否是提出问题的正确方法。我希望没事。

3 个答案:

答案 0 :(得分:2)

代码片段本身是可以的,但你放错了位置。你没有在你的班级中定义一个方法。

再试一次:

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

}

答案 1 :(得分: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个调用之间设置和重置分隔符等。

答案 2 :(得分:1)

您的代码很好,但似乎您在课堂上放错了地方。

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

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...

}