我试图逐行读取文件。这是一个文件示例:
state 0 start
state 5 accept
transition 0 0 1 x R
transition 1 0 0 x R
我为文件创建了一个Scanner
对象,并将分隔符设置为\t
。只要有下一行,我就会遍历文件。我想检查一行是以state
还是transition
开头,然后获取以下信息。对于以state
开头的行,我使用nextInt()
然后使用next()
分别获取0
和start
。然后出现了进入下一行并重复该过程的问题。我使用nextLine()
以及事情变得丑陋的地方。
我知道nextLine()
不会使用换行符,所以我想两次使用它会产生更多问题。
Scanner sc = new Scanner(file);
sc.useDelimiter("\t");
while(sc.hasNextLine())
{
if(sc.next().equals("state") == true)
{
int stateNumber = sc.nextInt();
String state = sc.next();
sc.nextLine();
}
sc.nextLine();
}
这似乎是创造问题的重要代码。
我是否误解next()
如何运作或我完全错过了其他内容?
答案 0 :(得分:1)
这里的一个选择是简单地在一行中读取每一行,然后用分隔符(制表符)拆分以获得各个组件:
which (sc.hasNextLine()) {
String line = sc.nextLine();
String[] parts = line.split("\\t");
if (parts[0].equals("state")) {
// construct custom object here
}
}
如果您想坚持使用原始方法,请使用:
while(sc.hasNextLine()) {
if (sc.next().equals("state")) {
int stateNumber = sc.nextInt();
String state = sc.next();
}
// consume the entire remaining line, line break included
sc.nextLine();
}
对于那些包含"state"
的行,您正在拨打nextLine()
两次,这会导致整行丢失。