Java突然停止写入ArrayList

时间:2016-01-06 22:48:42

标签: java arraylist filereader

我正在尝试编写类似文本文件解释器的东西。我决定从基础开始,写一些解剖字符串的东西:

public static void dataImport() throws IOException {

BufferedReader dataReader = new BufferedReader(new FileReader("C:\\Users\\(my name)\\Desktop\\javaWrite.txt"));
ArrayList<String> orderLine = new ArrayList<>();

String line = null;
String endResult = "";
String currentChar = null;

while((line = dataReader.readLine()) != null) {        
        for(int character = 0; character < line.length(); character++) {                
            currentChar = line.substring(character, character+1);                                
            if(currentChar.equals("|")) {                    
                for(String singleChar : orderLine) {                        
                    endResult += singleChar;
                }                    
                fileThings.add(endResult);                    
                endResult = "";
                orderLine.clear();                    
            }else{                    
                orderLine.add(currentChar);
            }                
        }            
}                
dataReader.close();
}

它正在读取的文本文件有“Hello | world!” writen。

代码输出“Hello”,没有别的。当我把它输出到else中的currentChar变量时,它只是继续阅读整个句子。因此,所有证据都会导致ArrayList orderLine出现问题。

2 个答案:

答案 0 :(得分:3)

只有在看到|时,您的代码才会将数据附加到数组列表中输入数据中的字符。您的输入数据只包含一个|字符。因此,您只在输出ArrayList中获得一行。

答案 1 :(得分:0)

正如@yole在另一个回答中已经说过的那样,当您看到fileThings.add()时,您只能致电|,并且该行的末尾没有|

但是,您的代码存在一些性能问题,最糟糕的是String += String构造。鉴于编译器将其转换为:

,性能非常糟糕
endResult = new StringBuilder().append(endResult).append(singleChar).toString();

这发生在一个循环中。糟糕!

此外,为什么在您真正想要String currentChar = line.substring(character, character+1)时使用char currentChar = line.charAt(character)

对于你正在做的事情,只需分开|。由于split()方法采用正则表达式,|具有特殊含义,因此必须对其进行转义,并且您应该使用try-with-resources:

try (BufferedReader dataReader = new BufferedReader(new FileReader("C:\\Users\\(my name)\\Desktop\\javaWrite.txt"))) {
    for (String line; (line = dataReader.readLine()) != null; ) {
        for (String endResult : line.split("\\|") {
            fileThings.add(endResult);
        }
    }
}