所以,我想做的是从文本文件中获取信息,
For example, 134567H;Gabriel;24/12/1994;67;78;89
然后我在下拉列表中显示仅管理员编号,这是第一个但不是整行。所以这是我的代码:
public static String[] readFile(){
String file = "output.txt";
ArrayList <String> studentList = new ArrayList <String> ();
try{
FileReader fr = new FileReader(file);
Scanner sc = new Scanner(fr);
sc.useDelimiter(";");
while(sc.hasNextLine()){
studentList.add(sc.nextLine());
}
fr.close();
}catch(FileNotFoundException exception){
System.out.println("File " + file + " was not found");
}catch(IOException exception){
System.out.println(exception);
}
return studentList.toArray(new String[studentList.size()]);
}
这就是我填充下拉列表的方式:
public void populate() {
String [] studentList ;
studentList = Question3ReadFile.readFile();
jComboBox_adminNo.removeAllItems();
for (String str : studentList) {
jComboBox_adminNo.addItem(str);
}
}
但是,我现在的问题是下拉列表中的选项显示文本文件中的整行。它不显示管理员号码。我已经尝试过useDelimiter了。我应该用那个吗?
任何帮助将不胜感激。提前谢谢。
Rince帮助检查。
public class Question3ReadFile extends Question3 {
private String adminNo;
public Question3ReadFile(String data) {
String[] tokens = data.split(";");
this.adminNo = tokens[0];
}
public static String[] readFile(){
String file = "output.txt";
ArrayList <String> studentList = new ArrayList <String> ();
try{
FileReader fr = new FileReader(file);
Scanner sc = new Scanner(fr);
while(sc.hasNextLine()){
studentList.add(new Question3ReadFile(sc.nextLine()));
}
fr.close();
}catch(FileNotFoundException exception){
System.out.println("File " + file + " was not found");
}catch(IOException exception){
System.out.println(exception);
}
return studentList.toArray(new String[studentList.size()]);
}
答案 0 :(得分:2)
hasNext和next而不是hasNextLine和nextLine
public static void main(String[] args) {
String input = " For example, 134567H;Gabriel;24/12/1994;67;78;89";
Scanner scanner = new Scanner(input);
scanner.useDelimiter(";");
String firstPart = null;
while(scanner.hasNext()){
firstPart = scanner.next();
break;
}
String secondPart = input.split(firstPart)[1].substring(1);
System.out.println(firstPart);
System.out.println(secondPart);
scanner.close();
}
答案 1 :(得分:1)
在这种情况下不要使用分隔符。我建议将一个Student对象排除在外。
studentList.add(new Student(sc.nextLine));
并拥有学生班:
public class Student {
private final String adminNo;
public Student(String data) {
String[] tokens = data.split(";");
this.adminNo = tokens[0];
}
public String getAdminNo() {
return adminNo;
}
}
然后你只需阅读稍后需要的字段(student.getAdminNo())。
这种方法更加漂亮,以后更容易扩展。
upd:简单化方法
或者不要为愚蠢的OO而烦恼,只需这样做:
studentList.add(sc.nextLine.split(";")[0]);