【发布时间】:2012-12-20 10:11:24
【问题描述】:
我有一个包含 1000 行的文本文件,格式如下:
19 x 75 Bullnose Architrave/Skirting £1.02
我正在编写一个逐行读取文件的方法 - 这工作正常。
然后我想使用“£”作为分隔符拆分每个字符串并将其写入
一个ArrayList<String>,格式如下:
19 x 75 Bullnose Architrave/Skirting, Metre, 1.02
这就是我的处理方式(productList 是 ArrayList,在 try 块之外声明/实例化):
try{
br = new BufferedReader(new FileReader(aFile));
String inputLine = br.readLine();
String delim = "£";
while (inputLine != null){
String[]halved = inputLine.split(delim, 2);
String lineOut = halved[0] + ", Metre, " + halved[1];//Array out of bounds
productList.add(lineOut);
inputLine = br.readLine();
}
}
字符串没有拆分,我不断收到ArrayIndexOutOfBoundsException。我对正则表达式不是很熟悉。我也尝试过使用旧的StringTokenizer,但得到了相同的结果。
£ 作为分隔符有问题还是其他原因?我确实想知道这是否与第二个令牌没有被读取为 String 有关?
任何想法都会有所帮助。
【问题讨论】:
-
System.out.println(inputLine.indexOf(delim));打印什么,当您将其作为循环的第一个操作时? -
有一些可能的原因:1)源文件的编码和编译命令中使用的编码不匹配2)阅读器的编码没有指定正确。最有可能 2) 来自您的代码。
-
在拆分前打印 inputLine 并检查内容。
-
如果是 (1),您可以使用
String delim = "\u00A3"来确保它是正确的字符串,无论.java文件的编码如何。 -
你能确定每一行都包含
£吗?另外,作为建议,您可以使用一个只有一行的小测试文件,然后打印所有内容以查看问题所在。