我正在尝试使用扫描仪从文本文件中将一些数据加载到GUI。我的文本文件中有两个部分:分会和会员。该俱乐部部分的代码运行正常。例如,如果我的列表中有4个俱乐部,则会显示所有这些俱乐部,但是对于“成员”部分,无论列表中有多少成员,都只会显示第一个成员。这是我的代码:
public void load (String fileName) throws FileNotFoundException {
FileInputStream fileIn = new FileInputStream("Clubs.txt");
Scanner scan = new Scanner(fileIn);
while (scan.hasNextLine()){
String line = scan.nextLine();
if(line.equals("Members")){
String firstName = scan.next();
String lastName = scan.next();
Pupil p1 = new Pupil( firstName, lastName);
pupils[nbrPupils] = p1;
nbrPupils ++;
}
else if(line.equals("Clubs")){
while (scan.hasNext()){
String club = scan.nextLine();
Club aNewClub = new Club(club);
clubs[nbrClubs] = aNewClub;
nbrClubs ++;
}
}
答案 0 :(得分:1)
提示:您在while (scan.hasNext())
部分中正在Clubs
,但您未在Members
部分执行此操作。
答案 1 :(得分:1)
从while
循环转换为if
条件,因为您只想检查是否有下一行
else if (line.equals("Clubs")) {
if (scan.hasNext()) {/////here if you use while loop , it will loop until the file is finish
String club = scan.nextLine();
}
答案 2 :(得分:0)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadFile {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
new ReadFile().load("");
}
public void load (String fileName) throws FileNotFoundException {
FileInputStream fileIn = new FileInputStream("C:\\Clubs.txt");
Scanner scan = new Scanner(fileIn);
boolean membersfound =false;
while (scan.hasNextLine()){
String line = scan.nextLine();
if(line.equals("Members") || membersfound){
String firstName = scan.next();
String lastName = scan.next();
System.out.println("Member "+firstName +":"+ lastName);
}
else if(line.equals("Clubs") ){
while (scan.hasNext()){
String club = scan.nextLine();
if( club.equals("Members")){
membersfound = true;
break;
}
System.out.println("Clubname :" + club
);
}
}
}
}
}
我本来可以修改整个程序。但我想告诉你你的错误 示例clubs.txt文件 会员 member1中 member2 member3 俱乐部 club1 club2 club3
答案 3 :(得分:-1)
执行scan.nextLine()
时,它会将扫描仪移动到您当前读取的扫描仪之后的行。因此,如果您继续scan.next()
,扫描仪将从当前行的末尾开始(在这种情况line
)并读取它之后的内容。
See here它说:
“使此扫描程序超过当前行,返回跳过的输入”
您可以在split()
上致电substring()
或line
并提取您需要的信息。