Java 在while循环中有一个for循环专门从文件中读取?

Java 在while循环中有一个for循环专门从文件中读取?,java,file-io,Java,File Io,我有一个包含多个团队的文本文件。所有团队都有不同的变量,但值不同。但在接近终点时,有些团队有2名团队成员,有些团队成员最多(8名) 我有这个while循环来读取整个行,并将值分配到对象的构造函数中。我想我应该使用for循环来分配团队成员,但是我应该在for条件中写些什么,以便为团队的对象分配 try { while(input.hasNext()) { input.nextLine();

我有一个包含多个团队的文本文件。所有团队都有不同的变量,但值不同。但在接近终点时,有些团队有2名团队成员,有些团队成员最多(8名)

我有这个while循环来读取整个行,并将值分配到对象的构造函数中。我想我应该使用for循环来分配团队成员,但是我应该在for条件中写些什么,以便为团队的对象分配

try {
            while(input.hasNext())
            {
                input.nextLine();
                int ID = input.nextInt();
                String teamName = input.next();
                String coachFirst = input.next();
                String coachLast = input.next();
                String mentorFirst = input.next();
                String mentorLast = input.next();
                String teamFs = input.next();
                String teamSS = input.next();

                //for loop?
                input.nextLine();
            }
        }
        catch (NoSuchElementException statException)
        {
            System.out.print("WRONG ELEMT");
        }
        catch (IllegalStateException stateException)
        {
            System.out.print("Wrong state");
        }
文本文件,以防任何人需要理解我的问题:

TeamNumber,Team Name,Coach First,Coach Last,Mentor First,Mentor Last,Team Fin Sponsor,Schools or Sponsoring Organization,TmMem1First,TmMem1Last,TmMem2First,TmMem2Last,TmMem3First,TmMem3Last,TmMem4First,TmMem4Last,TmMem5First,TmMem5Last,TmMem6First,TmMem6Last,TmMem7First,TmMem7Last,TmMem8First,TmMem8Last
6842,Reagan Ray-Guns,Judy,Mallon,Aziz,Valdez,Texas Workforce Commission,REAGAN H S,Steven,Cepeda,Alan,Yue,Tim,Callaway,Damon,Bertucci,Samuel,de Olvieira,Samuel,Day,,,,
6888,Islanders,Judy,Maldonado,Brady,Trevino,Three Rivers Robotics,THREE RIVERS MIDDLE,Shireen,Cowdrey,Dee,Roundtree,Steven,Callaway,Francisco,Bermea,,,,,,,,
7004,GREENHILL Tops,Kanat,LaBass,Harvey,Pflueger,GREENHILL Boosters,GREENHILL SCHOOL,Harvey,Pflueger,Sandra,Day,Denny,Rodriguez,shirley,Couvillon,Carly,Szarka,,,,,,
7079,SportBots,Karim,Kramer,Brian,Torres Santos,,HARMONY SCHOOL OF NATURE & ATHLETICS,Steven,Castillo Baca,John,McGaughey,Warren,Aktas,Diane,Barrera,Rebeca,Escamilla,Bert,Eickstead,Jina,Castillejo,Eddy,Romeo

检查下面的代码。在while循环的每次迭代结束时,您将得到一个新的“newTeam”对象,您可以以任何方式操纵它。每个团队对象都包含一个用于保存团队成员对象的ArrayList。每个团队成员对象都有一个名字和一个姓氏

我本来可以扩展成员类来存储教练和导师的姓名,但我不想让您感到困惑。因此,我一直保持简单。你可以在此基础上再接再厉

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;


public class TeamReader {
    // Nested class for holding the properties of a team
    static class Team{
        // Nested class for holding first and last names of members
        static class Member{
            String firstName, lastName;
            public Member(String fname, String lname){
                this.firstName = fname;
                this.lastName = lname;
            }
        }

        int ID;
        String teamName, coachFirst, coachLast, mentorFirst, mentorLast, sponsor, org;
        ArrayList<Member> members = new ArrayList<Member>();
        public String toString(){
            return Integer.toString(ID)+" - "+teamName;
        }
    }

    public static void main(String[] args) throws IOException {
        //System.out.println(System.getProperty("user.dir"));  Finding current working directory
        File file = new File("input.csv");
        BufferedReader br = new BufferedReader(new FileReader(file));
        String current;
        current = br.readLine();  // Skipping csv header

        while((current = br.readLine())!=null){
            System.out.println(current);
            String[] data = current.split(",");
            Team newTeam = new Team();

            for (int i = 0; i < data.length; i++){
                switch(i){
                case 0:
                    newTeam.ID = Integer.parseInt(data[i]);
                    break;
                case 1: newTeam.teamName = data[i];
                        break;
                case 2: newTeam.coachFirst = data[i];
                        break;
                case 3: newTeam.coachLast = data[i];
                        break;
                case 4: newTeam.mentorFirst = data[i];
                        break;
                case 5: newTeam.mentorLast = data[i];
                        break;
                case 6: newTeam.sponsor = data[i];
                        break;
                case 7: newTeam.org = data[i];
                        break;
                default:newTeam.members.add(new Team.Member(data[i],data[i+1]));
                        i++;
                        break;
                }
            }
            // Do whatever you want with the team
            System.out.println(newTeam);
        }
    }
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
公共类TeamReader{
//用于保存团队属性的嵌套类
静态班小组{
//用于保存成员的名字和姓氏的嵌套类
静态类成员{
字符串firstName,lastName;
公共成员(字符串fname、字符串lname){
this.firstName=fname;
this.lastName=lname;
}
}
int-ID;
字符串teamName、coachFirst、coachLast、mentorFirst、mentorLast、赞助商、组织;
ArrayList成员=新的ArrayList();
公共字符串toString(){
返回整数.toString(ID)+“-”+teamName;
}
}
公共静态void main(字符串[]args)引发IOException{
//System.out.println(System.getProperty(“user.dir”);查找当前工作目录
文件=新文件(“input.csv”);
BufferedReader br=新的BufferedReader(新文件读取器(文件));
串电流;
current=br.readLine();//跳过csv头
而((当前=br.readLine())!=null){
系统输出打印项次(当前);
String[]data=current.split(“,”);
团队新团队=新团队();
对于(int i=0;i
只需立即将整个文件读入
列表
,然后浏览
列表
,并实例化您的团队

public static void main(String[] args) {      
    try {
        List<String> myFileLines = Files.readAllLines(Paths.get(yourTextFile));

        List<Team> myTeams = new ArrayList<>();
        for (String line : myFileLines) {
            String[] linePieces = line.split(",");

            Team team = new Team();
            team.TeamNumber = linePieces[0];
            team.TeamName = linePieces[1];
            team.CoachFirst = linePieces[2];
            // etc...

            myTeams.add(team);
        }

        // Do whatever with your list of teams
    } catch (Exception e) {
        // Handle exception
    }
}

public static class Team {
    String TeamNumber,TeamName,CoachFirst,CoachLast,MentorFirst,
            MentorLast,TeamFinSponsor,SchoolsorSponsoringOrganization,
            TmMem1First,TmMem1Last,TmMem2First,TmMem2Last,TmMem3First,
            TmMem3Last,TmMem4First,TmMem4Last,TmMem5First,TmMem5Last,
            TmMem6First,TmMem6Last,TmMem7First,TmMem7Last,TmMem8First,TmMem8Last;
}
publicstaticvoidmain(字符串[]args){
试一试{
列出myFileLines=Files.readAllLines(path.get(yourTextFile));
List myTeams=new ArrayList();
for(字符串行:myFileLines){
String[]linePieces=line.split(“,”);
团队=新团队();
team.TeamNumber=线条[0];
team.TeamName=线条[1];
team.CoachFirst=线条[2];
//等等。。。
添加(团队);
}
//对你的团队列表做任何事情
}捕获(例外e){
//处理异常
}
}
公共静态课堂小组{
字符串TeamNumber、TeamName、CoachFirst、CoachLast、导师优先、,
导师、团队资助、学校或资助组织,
TmMem1First、TmMem1Last、TmMem2First、TmMem2Last、TmMem3First、,
TmMem3Last、TmMem4First、TmMem4Last、TmMem5First、TmMem5Last、,
TmMem6First、TmMem6Last、TmMem7First、TmMem7Last、TmMem8First、TmMem8Last;
}

我建议逐行读取文件,每行使用新的扫描仪。这样,当扫描器没有下一个元素时,您就知道已经到了行的末尾。但是,如果我将txt文件替换为另一个具有相同元素类型但具有不同值@jbnizet的文件,则代码将读取新文本文件中的值。也就是说。我只是注意到每行中的条目数总是相同的。只是最后一行是空字符串。所以jsut测试它们是否为空。或者更好,使用CSV库读取文件,因为它是CSV文件。请用代码演示一下好吗@JBNizet