使用扫描仪

时间:2015-05-06 18:12:35

标签: java java.util.scanner

在课程中,我有一个方法replay,我在其中创建了一个Scanner对象scScanner对象从文件中读取一行中的第一个单词。 然后我将该Scanner对象传递给另一个类中的方法。在那个方法中,我想阅读该行中的其余数字。

该文件包含以下数据:

Cat 2 4

Dog 3 1

Bird 2 5

Cow 4 1

第一种方法是“Cat”,第二种方法是“2”和“4”。

我的问题是,在第二种方法中,我再次使用sc.nextLine(),这使得Scanner跳转到下一行,而不是它开始的行(在第一种方法中)。 / p>

如何让Scanner与开头保持同一条线?

(注意,我需要将Scanner-object传递给新方法,这是指令中的指令,所以我无法改变)。

班级内联:

public class Inline {

    public void replay() {
        String line = "";
        File file = new File("myFile.txt");
        Scanner sc = null;
        String firstWord = null;

        try {
            sc = new Scanner(file);
            while (sc.hasNextLine()) {
                line = sc.nextLine();
                String parts[] = line.trim().split("\\s+");  
                firstWord = parts[0];                    
                Command moveCommand = new MoveCommand();
                moveCommand.load(sc);                   **//HERE I PASS SCANNER-OBJECT TO LOAD**
             }
        } 
        catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }       
    }
}

Class MoveCommand:

public class MoveCommand implements Command {

    private int second;
    private int third;

    public MoveCommand() {}            


    @Override
    public void load(Scanner sc) {
        String line = "";
        line = sc.nextLine();              **//HERE I USE SC.NEXTLINE() AGAIN. IS THERE ANOTHER WAY???**
        String parts[] = line.trim().split("\\s+");                
        second = Integer.parseInt(parts[1]);
        third = Integer.parseInt(parts[2]);                    
    }    
}

1 个答案:

答案 0 :(得分:2)

Scanner可以通过令牌读取令牌。令牌是输入的一部分,用分隔符分割。

来自API

  

Scanner使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。然后可以使用各种next方法将生成的标记转换为不同类型的值。

由于你的String已经需要被空格打破,你的工作几乎已经完成。

尝试从中得到一个想法(我不想为你解决):

public class Example {

    public static void main(String[] args) {

        String input = "Cat 3 4";

        Scanner sc = new Scanner(input);
        System.out.println(sc.next());

        load(sc);
    }

    static void load(Scanner sc) {

        System.out.println(sc.next());
        System.out.println(sc.next());
    }
}

输出:

Cat
3
4