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