Мне нужна помощь, потянув строку с пробелами в нем из входного файла
Я делаю программу, которая берет записи о студентах из входного файла и сохраняет их в массиве. Я забираю студенческий билет, имя и три теста. Каждый элемент разделен вкладками. Мне нужна помощь, чтобы вытащить имя студента как одно целое. Если я запустил это так, это испортит, потому что некоторые имена имеют фамилию, имя и отчество. Чтобы уточнить мою основную проблему, я пытаюсь извлечь имя 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;
}