Android 无法作为整数进行分析

Android 无法作为整数进行分析,android,readfile,parseint,Android,Readfile,Parseint,好的…我有这个.txt文件(UTF-8) 这个密码呢 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.read

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

这个密码呢

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++;
}
在emulator上这很好,但在真实设备(HTC Desire)上,我得到一个(奇怪的)错误:

有什么问题吗


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

您的文件可能不是UTF8或类似的东西

然而,如果你想破解一个补丁,因为你对这个问题不感兴趣,那就拿出一个解决方案:)然后去掉任何不是数字或小数点的东西

String[] article = p.split(line);
Integer i = Integer.parseInt(article[0].replaceAll("[^0-9.]",""));
正则表达式不是完美的(例如,它会影响…999…),但它会适合您

编辑:

我似乎没有正确地阅读这个问题。如果它仅位于文件的开头,则很可能是一个字节顺序标记,用于告诉您文件是否为unicode,以及在UTF16/32中是否为little endian或big endian。你不需要经常看到它被使用


我本打算添加此评论,但决定也添加一张图片。问题似乎不是文件不是UTF-8,而是事实恰恰相反——它似乎是UTF-8,但没有被正确读取

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


如果我以ANSI格式保存文件,则这些字符不在那里。

您可以使用记事本++,打开文本文件,选择菜单编码-->“不带BOM的UTF-8编码”并使用此选项保存。编码字节(EF-BB-BF)将被删除,因此您的代码可以将字符串解析为整数而不会出现任何问题


希望对您有所帮助。

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

是的,它可以工作!:)但是,为什么它只显示数字“4661”?字符串的另一个“有问题”部分在哪里?如果没有看到您的文件,就不知道了。您的原始文件可能有奇怪的编码或已损坏。
E/AndroidRuntime(16422): java.lang.NumberFormatException: unable to parse '4661' as integer
String[] article = p.split(line);
Integer i = Integer.parseInt(article[0].replaceAll("[^0-9.]",""));