Мне нужна помощь, потянув строку с пробелами в нем из входного файла

Я делаю программу, которая берет записи о студентах из входного файла и сохраняет их в массиве. Я забираю студенческий билет, имя и три теста. Каждый элемент разделен вкладками. Мне нужна помощь, чтобы вытащить имя студента как одно целое. Если я запустил это так, это испортит, потому что некоторые имена имеют фамилию, имя и отчество. Чтобы уточнить мою основную проблему, я пытаюсь извлечь имя IE J A Singleton из файла и включить его в мой список. Я просто взял имя, а затем фамилию и соединил их, но это не всегда работает, потому что у некоторых из них есть три разные вещи, такие как мой пример выше. Можно ли как-то просто захватить все имя, так как в файле есть вкладка до и после имени?

публичный класс Main {

public static void main(String[] args) throws Exception {
    String stdID;
    int tScore1;
    int tScore2;
    int tScore3;
    String sName;
    String fName;
    String lName;
    Students workobj;
    try{
        //opening the file for input
        FileInputStream istream = new FileInputStream("input.txt");
        Scanner input = new Scanner(istream);
        //creating an arraylist to store student objects
        ArrayList<Students> AllStudents= new ArrayList<Students>();

        while(input.hasNextLine()){

            //first I will read the student id
            stdID=input.next();
            //remove later
            System.out.println("stdEcho "+ stdID);
            //next I will read the student name
            fName= input.next();
            lName=input.next();

            sName=(fName+lName);
            //remove later
            System.out.println("NameEcho " + sName);
            //next read in the test scores
            tScore1=input.nextInt();
            //remove later
            System.out.println("Test01Echo " +tScore1);
            tScore2=input.nextInt();
            //remove later
            System.out.println("Test02Echo " +tScore2);
            tScore3=input.nextInt();
            //remove later
            System.out.println("Test03Echo " +tScore3);



            //printing the record
            System.out.println("Student ID: "+stdID + " Student Name: " + sName + " Test Score 1: " +tScore1
            + " Test Score 2: " + tScore2 + " Test Score 3: " + tScore3);
            output.println("Student ID: "+stdID + " Student Name: " + sName + " Test Score 1: " +tScore1
                    + " Test Score 2: " + tScore2 + " Test Score 3: " + tScore3);
            //creating a student object
            Students StudentRecord= new Students(stdID,sName,tScore1,tScore2,tScore3);
            StudentRecord.listStudents();
            //now store this in allstudents
            AllStudents.add(StudentRecord);
        }//end of while
        //Now I will list the records
        System.out.println("Getting Students from AllStudents Container");
        for(int i=0;i<=AllStudents.size()-1;i++){
            //retrieving the object
            workobj=AllStudents.get(i);
            workobj.listStudents();
        }//end of for
        System.out.println("This is the sorted values of Students from the AllStudents container");
        sortLarge(AllStudents);
        for(int i=0; i<=AllStudents.size()-1;i++){
            workobj=AllStudents.get(i);
            workobj.listStudents();
        }

    }//end of try

        catch (FileNotFoundException e){
            System.out.println("file not found");
            System.err.println("File not found");
            System.exit(11);
    }// end catch
            catch (InputMismatchException e){
                System.out.println("Error in Reading File");
                System.err.println("Error in Reading File");
                System.exit(10);
            }
    finally {
        output.close();
        System.exit(2);
    }
}

1 ответ

Решение

Используйте функцию разделения класса String, например S.split("\t"); Это вернет строковый массив из источника, разделенного на основе вкладки. Вы можете узнать об этом на https://docs.oracle.com/javase/7/docs/api/java/lang/String.html Вот код, который вы можете попробуйте, функция для получения студенческих записей из имени файла файла передается в качестве параметра. Убедитесь, что у вас есть вкладка между идентификатором, именем и каждым счетом.

// Create list of All Records
    public ArrayList<Students> getStudents(String fileName) throws Exception
    {
        System.out.println("2: Please Wait ....  ");
        String stdID;
        int tScore1;
        int tScore2;
        int tScore3;
        String sName;
        //reading from "input.txt"
        File data=new File(fileName);
        FileReader reader=new FileReader(data.getAbsoluteFile());
        BufferedReader breader= new BufferedReader(reader);

        String eachrow;
        ArrayList<Students> AllStudents= new ArrayList<Students>();
        while((eachrow = breader.readLine()) != null)
        {
            String []r = eachrow.split("\t")
                stdID = r[0];
                sName = r[1];
                tScore1 = r[2];
                tScore2 = r[3];
                tScore3 = r[4];
                //creating a student object
                Students StudentRecord= new Students(stdID,sName,tScore1,tScore2,tScore3);
                StudentRecord.listStudents();
                //now store this in allstudents
                AllStudents.add(StudentRecord);
        }

        System.out.println("Student Records are Created Successfully.");
        System.out.println("-----------------------------------------------------------------");
        return AllStudents;
    }
Другие вопросы по тегам