【发布时间】:2018-09-05 08:24:51
【问题描述】:
我编写此代码是因为我需要读取文件的某些行以获取数据并将它们放入对象中。
问题是扫描仪只读取第一行。
我尝试使用此打印System.out.println(sc.hasNext()); 并调试代码,但是当第一个循环执行时,while 条件 (sc.hasNext()) 返回 false 。
但在文件中有 2 行。
Scanner sc =null;
int[] counter=new int[users.length];
for(int i=0;i<users.length-1;i++){
sc= new Scanner(new FileReader("src/MailListUser"+String.valueOf(i+1)+".txt")).useDelimiter("\\s*^^\\s*");
while(sc.hasNext()){
String mail =sc.next();
String [] data= mail.split(":::");
Email email;
String dat=data[5].replaceAll("_", " ");
DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy",Locale.ENGLISH);
Date date = format.parse(dat);
email = new Email(data[1],data[2],data[3],data[4],date,Integer.parseInt(data[6]));
if(i+1==1) {
counter[i]++;
mbUser1.add(email);
}
else if(i+1==2){
counter[i]++;
mbUser2.add(email);
}
else if(i+1==3){
counter[i]++;
mbUser3.add(email);
}
}
}
sc.close();
有代码。 该文件包含:
^^:::user1@unito.it:::user1@unito.it:::grbvfcsx:::yrdfsx:::Wed_Sep_05_09:25:51_CEST_2018:::-1568000361:::^^
^^:::user1@unito.it:::user1@unito.it:::rgvfcdsx:::trvedcs:::Wed_Sep_05_09:27:53_CEST_2018:::482784668:::^^
此文件的每一行都以 ^^ 开头并以 ^^ 结尾
我不明白为什么这段代码只能读取一行
【问题讨论】:
-
在此行之前:
String dat=data[5].replaceAll("_", " ");您应该检查数据是否不为空且至少包含 6 个项目。您还应该转义^^,因为^匹配一行的开头 -
@ScaryWombat 我尝试使用 bufferedReader 但仅当 data[4] 中的字符串只有一行时才有效,但此字符串需要有一行或多行,例如“hello \n你好吗?\n 再见” .... 实际上我使用扫描仪,因为它提供了 useDelimiter 方法来分隔我尝试读取的文件的每一行,有什么类似于 bufferedReader 中的 useDelimiter 吗?
-
@StephaneM 它不可能是空的,因为当我写它我另一个类我向自己保证它永远不会为空。此外,数据肯定至少有 6 项,因为 split 方法每次都会拆分他的字符串它找到“:::”,当我写这行时,我保证写分隔符“:::”
-
@ScaryWombat 实际上这里 link 写的是在 bufferedReader 中没有使用分隔符
标签: java java.util.scanner filereader