@Shalom helper... czyli? hmm... jeszcze mam problemy z tą obiektowością mianowicie: co w przypadku jeśli w przyszłości zmienię sobie format pliku? Załóżmy w pierwszej linijce dodam informację o grupie tych studentów, np plik:
[GRUPA G435C]
[Paweł==Trybson]
[Ania==Duża]
[Wojtek==Jakistam]
Nie chciałabym wtedy rozgrzebywać całego programu.
Czy taka klasa to jest dobry pomysł? zwłaszcza te ArrayList w tej klasie mnie martwią ;/?
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileParse {
private final static Charset ENCODING = StandardCharsets.UTF_8;
private final Path FilePath;
private ArrayList<String> names = new ArrayList<String>();
private ArrayList<String> surnames = new ArrayList<String>();
private int recordsCounter = 0;
public FileParse(String FilePath) {
this.FilePath = Paths.get(FilePath);
}
public String getName(int id) {
return names.get(id);
}
public String getSurname(int id) {
return surnames.get(id);
}
public int getRecordCounter() {
return recordsCounter;
}
public final void parse() throws IOException {
try {
Scanner scanner = new Scanner(FilePath,ENCODING.name());
//w pierwszej linijce pojawiła się informacja o grupie, więc dodaję
processGroupInfo(scanner.nextLine());
while (scanner.hasNextLine()){
processRecord(scanner.nextLine());
}
} catch(IOException ex) { System.out.println("do ogarnięcia"); }
}
protected void processRecord(String Line) {
Pattern recordPattern = Pattern.compile("\\[(.*)==(.*)\\]");
Matcher recordMatcher = recordPattern.matcher(Line);
if(!recordMatcher.find())
return;
names.add(recordsCounter, recordMatcher.group(1));
surnames.add(recordsCounter, recordMatcher.group(2));
recordsCounter++;
}
/* format pliku zmienił się w pierwszej linii dodam informację
odnośnie nazwy grupy tych studentów np. [M101] dodaję, więc:
*/
private String groupInfo;
public String getGroupInfo() {
return groupInfo;
}
protected void processGroupInfo(String Line) {
Pattern groupPattern = Pattern.compile("\\[(.*)\\]");
Matcher groupMatcher = groupPattern.matcher(Line);
if(!groupMatcher.find())
return;
groupInfo = groupMatcher.group(1);
}
}
potem przy parsowaniu używam np tylko:
FileParse test = new FileParse("test.txt");
test.parse();
System.out.println(test.getGroupInfo());
for(i=0;i<test.getRecordCounter();i++)
records.add(i,new Student(test.getSurname(i),test.getName(i)));
PS
proszę nie zwracać uwagi na głupie nazwy zmiennych czy brak obsługi wyjątków jestem początkująca i chodzi tylko oto jak podejść do takiego zagadnienia prawidłowo.
a i obiekt Student do którego wczytuje Imię i Nazwisko z pliku ma jeszcze inne pola, np. Numer Indeksu - ale to pobieram już z innego miejsca.