我目前正在学习BufferedReader的mark()和reset()方法,并希望执行以下操作:
我解析CSV,设置如下(空格作为分隔符):
555 value1
555 value2
600 foobar
700 whatever
使用第一个数字作为ID创建每一行,一个对象(地址)。多次使用ID时,我想比较第二列中的值,然后继续。
根据上面的数据,我的代码会将这两个值与ID 555进行比较,但无法使用第三行(ID 600)创建对象。
发现错误 :解析后的第一行。简单混合变量。
我的设置类似于:
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
br.mark(1000); //save current line
List<String> list = new ArrayList<String>(Arrays.asList(line.split(delimiter)));
Adress a = new Adress(Long.parseLong(list.get(0)); //create object
while (((checkLine = br.readLine()) != null) && exit == false){
List<String> nextLine = new ArrayList<String>(Arrays.asList(line.split(delimiter)));
long nextId = Long.parseLong(nextLine.get(0));
if( nextId == a.getId() ){
System.out.println(nextId + " vs. " + a.getId());
br.mark(1000); //mark the next line if it has the same ID
//[...] do more stuff
} else{
exit = true;
}
}
br.reset(); //reset to the last line with the ID
}
SYSOUT:
555 vs. 555
555 vs. 555
555 vs. 555
答案 0 :(得分:0)
如果你的地址用空格分隔,地址的不同元素也用空格分隔,那么这行不会给你地址,它会给你元素。
List < String > list = new ArrayList < String > ( Arrays . asList ( line . split ( delimiter ) ) ) ;
答案 1 :(得分:0)
错误是以下变量混合(仅仅是我的愚蠢是错误!):
while (((checkLine = br.readLine()) != null) && exit == false){
List<String> nextLine = new ArrayList<String>(Arrays.asList(line.split(delimiter)));
[...]
List nextLine必须从line.split更改为checkline.split:
List<String> nextLine = new ArrayList<String>(Arrays.asList(checkLine.split(delimiter)));
感谢大家的帮助!
答案 2 :(得分:0)
我在代码中看到了几个问题:
在第二个while()循环中,您仍在分割字符串“line”,但while循环将输入分配给“checkLine”。
您不会将“exit”重置为false - 这可能发生在br.reset()之后。