无法解析为整数

时间:2011-01-04 22:19:38

标签: android readfile parseint

好吧......我有这个.txt文件(UTF-8)

4661,SOMETHING,3858884120607,24,24.09
4659,SOMETHING1,3858884120621,24,15.95
4660,SOMETHING2,3858884120614,24,19.58

这段代码

FileInputStream fis = new FileInputStream(new File(someTextFile.txt));
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader in = new BufferedReader(isr);

int i = 0;
String line;
while((line = in.readLine()) != null) {
Pattern p = Pattern.compile(",");
String[] article = p.split(line);

// I don't know why but when a first line starts with
// an integer - article[0] (which in .txt file is 4661)
// becomes someWeirdCharacter4661 so I need to trim it
// *weird character is like |=>|

if (i == 0) {
    StringBuffer articleCode = new StringBuffer(article[0]);
    articleCode.deleteCharAt(0);
    article[0] = articleCode.toString();
}

SomeArticle**.addOrChange(mContext, Integer.parseInt(article[0]), article[1], article[2], Integer.parseInt(article[3]), Double.parseDouble(article[4]));

i++;
}

模拟器上它很好但在真实设备上(HTC Desire)我得到这个(奇怪的)错误:

E/AndroidRuntime(16422): java.lang.NumberFormatException: unable to parse '4661' as integer

有什么问题?

**它只是我的类,需要这些参数作为输入(context,int,string,string,int,double)

4 个答案:

答案 0 :(得分:7)

你的文件可能不是UTF8或其他类似的东西。

但是如果你想破解一个修复因为你对这个问题不感兴趣只是一个解决方案:)然后去掉任何不是数字或小数点的东西。

String[] article = p.split(line);
Integer i = Integer.parseInt(article[0].replaceAll("[^0-9.]",""));

正则表达式并不完美(例如它会影响...... 999 ....)但它会为你做。

编辑:

我似乎没有正确地阅读这个问题。如果只是在文件的开头那么你很可能是一个字节顺序标记,它用于告诉你文件是unicode还是UTF16 / 32,无论是小端还是大端端。你不需要经常看到它的使用。

http://unicode.org/faq/utf_bom.html#bom10

答案 1 :(得分:3)

我打算将其添加为评论,但也决定加入一张图片。似乎问题不在于文件不是UTF-8,而实际上情况恰恰相反 - 它似乎是UTF-8但它没有被正确读取。

图像来自十六进制编辑器,查看我创建的包含第一行的UTF-8文件。请注意4661之前的3个字符......

alt text

如果我以ANSI格式保存文件,那些字符就不存在了。

答案 2 :(得分:1)

您可以使用Notepad ++,打开文本文件,选择菜单编码 - >"编码为UTF-8,无需BOM"并使用此选项保存。编码的字节(EF BB BF)将被删除,因此您的代码可以将字符串解析为整数而没有任何问题。

希望得到这个帮助。

答案 3 :(得分:0)

我已将文件转换为ascii格式,并在类似的应用程序中正确读取。