下面的代码是我尝试从字符串文件中读取数据,读取每一行,直到找到“:”,然后存储+打印之后的所有内容。但是打印函数打印出我从文件中读入的所有内容。有人能发现我哪里出错了吗?谢谢
编辑:每行都采用这种格式“此处有一些文本:此处有更多文本”
public void openFile() {
try {
scanner = new BufferedReader(new FileReader("calendar.ics"));
} catch (Exception e) {
System.out.println("Could not open file");
}
}
public void readFile() {
ArrayList<String> vals = new ArrayList<String>();
String test;
try {
while ((line = scanner.readLine()) != null)
{
int indexOfComma = line.indexOf("\\:"); // returns firstIndexOf ':'
test = line.substring(indexOfComma+1); // test to be everything after ':'
vals.add(test); // add values to vals
}
} catch(Exception ex){ }
for(int i=0; i<vals.size(); i++){
System.out.println(vals.get(i));
}
}
最佳答案
你不需要逃离你的冒号。
line.indexOf("\\:");
将上面的行更改为:-
line.indexOf(":");
因为,它将搜索 \\:
,如果没有找到,则返回值 -1
。
test = line.substring(indexOfComma+1);
因此,如果您的 indexComma
是 -1
(如果您的字符串不包含 - \\:
,那么肯定会是这样),那么你上面的行变成:-
line.substring(0); // same as whole string
<小时/>
建议,在声明列表时,您应该将抽象类型作为引用类型。因此,您应该在 List
声明的 LHS 上使用 List
而不是 ArrayList
: -
List<String> vals = new ArrayList<String>();
关于java - ArrayList困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13545150/