在课程中,我有一个方法replay
,我在其中创建了一个Scanner
对象sc
。
Scanner
对象从文件中读取一行中的第一个单词。
然后我将该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]);
}
}
答案 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