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,但我还不知道它是如何工作的。事实上,逐行读取文件的代码是我从互联网上复制的代码。但是像分裂这样的事情,我会调查的