Java突然停止了对ArrayList的写入

Java突然停止了对ArrayList的写入,java,arraylist,filereader,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 Array

我想写一些像文本文件解释器的东西。我决定从基础开始,写一些剖析字符串的东西:

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();
}
publicstaticvoiddataimport()引发IOException{
BufferedReader dataReader=新的BufferedReader(新的文件阅读器(“C:\\Users\\(我的名字)\\Desktop\\javaWrite.txt”);
ArrayList orderLine=新的ArrayList();
字符串行=null;
字符串endResult=“”;
字符串currentChar=null;
而((line=dataReader.readLine())!=null){
对于(int character=0;character
它所读取的文本文件已写入“Hello | world!”


代码输出“Hello”,没有其他输出。当我让它在else中输出currentChar变量时,它只是继续读取整个sentense。因此,所有证据都会导致ArrayList orderLine出现问题。

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

正如@yole在另一个答案中所说的,当您看到一个
时,您只调用
fileThings.add()
,并且在该行的末尾没有

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

endResult = new StringBuilder().append(endResult).append(singleChar).toString();
这是在一个循环中发生的。哎呀

此外,如果您确实需要
char currentChar=line.charAt(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);
        }
    }
}

实际上,我很惊讶输出不是
world
相反,因为一旦遇到
|
,就会清除
数组列表
。@MattCremeens但它被添加到
文件事物
(不管是什么),而
世界就在那里不见了。@Andreas,啊,我现在明白了。我在想OP是在打印
orderLine
的内容。你试过javascript吗?你可以很容易地做到这一点jQuery@Andreas哎呀,复印的时候漏掉了什么。fileThings只是字符串变量的另一个数组列表,我很困惑。在我看来,
orderLine
仅在未遇到
|
时添加到,就像在
else
子句中一样。也许我错了。OP没有显示代码中显示输出的部分,我假设代码输出fileThings列表的内容。我现在明白了。是的,你说得对:OP没有说他们输出了什么,这增加了我的困惑。@yole啊,我的错。它只是在main中使用for-each循环来输出filleThingsWell,我应该知道我的代码并不完美(主要是因为我在一个月前才开始使用Java,还没有尝试过太高级的东西)。NetBeans告诉我也使用try-with-resources,但我还不知道它是如何工作的。事实上,逐行读取文件的代码是我从互联网上复制的代码。但是像分裂这样的事情,我会调查的