Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用扫描仪将同一行读两遍_Java_Java.util.scanner - Fatal编程技术网

Java 使用扫描仪将同一行读两遍

Java 使用扫描仪将同一行读两遍,java,java.util.scanner,Java,Java.util.scanner,在一个类中,我有一个方法replay,其中我创建了一个Scanner对象sc。 扫描器从文件中读取一行中的第一个单词。 然后,我将该扫描器对象传递给另一个类中的方法。用这种方法,我想读一行中的其余数字 该文件由以下数据组成: Cat 2 4 Dog 3 1 Bird 2 5 Cow 4 1 第一种方法读作“Cat”,第二种方法读作“2”和“4” 我的问题是,在第二种方法中,我再次使用了sc.nextLine(),这使得扫描仪跳转到下一行,而不是它开始的那一行(在第一种方法中) 如何使Sc

在一个类中,我有一个方法
replay
,其中我创建了一个
Scanner
对象
sc
。 扫描器从文件中读取一行中的第一个单词。 然后,我将该
扫描器
对象传递给另一个类中的方法。用这种方法,我想读一行中的其余数字

该文件由以下数据组成:

Cat 2 4

Dog 3 1

Bird 2 5

Cow 4 1
第一种方法读作“Cat”,第二种方法读作“2”和“4”

我的问题是,在第二种方法中,我再次使用了
sc.nextLine()
,这使得
扫描仪
跳转到下一行,而不是它开始的那一行(在第一种方法中)

如何使
Scanner
与开始时保持在同一行

(注意,我需要将Scanner对象传递给新方法,这是作业中的说明,因此我无法更改)

类内联:

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();
        }       
    }
}
类移动命令:

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]);                    
    }    
}

扫描仪可以逐个令牌读取令牌。标记是使用分隔符拆分的输入的一部分

从:

Scanner
使用定界符模式将其输入分解为标记,默认情况下,定界符模式与空白匹配。然后,可以使用各种
next
方法将生成的令牌转换为不同类型的值

由于您的
字符串
已经需要被空格打断,所以您的工作几乎完成了

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

输出:

Cat
3
4

扫描仪可以逐个令牌读取令牌。标记是使用分隔符拆分的输入的一部分

从:

Scanner
使用定界符模式将其输入分解为标记,默认情况下,定界符模式与空白匹配。然后,可以使用各种
next
方法将生成的令牌转换为不同类型的值

由于您的
字符串
已经需要被空格打断,所以您的工作几乎完成了

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

输出:

Cat
3
4

扫描仪可以逐个令牌读取令牌。标记是使用分隔符拆分的输入的一部分

从:

Scanner
使用定界符模式将其输入分解为标记,默认情况下,定界符模式与空白匹配。然后,可以使用各种
next
方法将生成的令牌转换为不同类型的值

由于您的
字符串
已经需要被空格打断,所以您的工作几乎完成了

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

输出:

Cat
3
4

扫描仪可以逐个令牌读取令牌。标记是使用分隔符拆分的输入的一部分

从:

Scanner
使用定界符模式将其输入分解为标记,默认情况下,定界符模式与空白匹配。然后,可以使用各种
next
方法将生成的令牌转换为不同类型的值

由于您的
字符串
已经需要被空格打断,所以您的工作几乎完成了

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

输出:

Cat
3
4

您可以更改什么?为什么不使用
next()
来代替呢?@DHall只要我通过sc,我就可以更改方法中的内容。您可以更改什么?为什么不使用
next()
来代替呢?@DHall只要我通过sc,我就可以更改方法中的内容。您可以更改什么?为什么不使用
next()
相反?@DHall我可以更改方法中的内容,只要我通过sc。您可以更改什么?为什么不使用
next()
代替?@DHall我可以更改方法中的内容,只要我通过sc。我将您的代码应用到我的程序中,它就可以工作。谢谢:-)我将你的代码应用到我的程序中,它运行正常。谢谢:-)我将你的代码应用到我的程序中,它运行正常。谢谢:-)我将你的代码应用到我的程序中,它运行正常。谢谢:-)