java - Android Java - 解析 "76"时出现 NumberFormatException

标签 java android zlib numberformatexception parseint

我正在开发一个使用 zbar 来解码 QR 的 Android 应用程序。 QR 的结构为:“SpecificPrefix/[Number]”。

String d = sym.getData(); // I get the QR text from the symbol
if(d.startsWith(QRUri)) { // QRUri is a string const containig the prefix
    int id;
    try {
        Log.d("NOT", "QR Subst \"" + d.substring(QRUri.length()) + "\""); // Print the data after the Prefix
        id = Integer.parseInt(d.substring(QRUri.length())); // Try to parse it to int
    } catch(NumberFormatException e) {
        e.printStackTrace();
        id = 0;
    }
}

到目前为止,这段代码适用于每个 QR,但今天我发现对于“SpecificPrefix/76”却不起作用。

这是日志:

D/NOT﹕ QR Subst "76"
D/NOT﹕ No Int found!
W/System.err﹕ java.lang.NumberFormatException: Invalid int: "76"
W/System.err﹕ at java.lang.Integer.invalidInt(Integer.java:138)
W/System.err﹕ at java.lang.Integer.parse(Integer.java:375)
W/System.err﹕ at java.lang.Integer.parseInt(Integer.java:366)
W/System.err﹕ at java.lang.Integer.parseInt(Integer.java:332)
W/System.err﹕ at [...].MainActivity$3.onPreviewFrame(MainActivity.java:146)
W/System.err﹕ at android.hardware.Camera$EventHandler.handleMessage(Camera.java:841)
W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err﹕ at android.os.Looper.loop(Looper.java:137)
W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:4921)
W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)

java.lang.NumberFormatException:无效的整数:“76” 我不明白为什么它不起作用!

在 Android 4.1.2 上测试,但似乎在 4.4.2 上也不起作用。

提前感谢所有希望解决这个问题的人。

最佳答案

将整个字符串复制到 Eclipse 中进行测试后,我可以重复此问题。我在TextPad中以“二进制模式”打开源代码,看看字符串中是否有一些奇怪的字符,果然有。

22 EF BB BF 37 36 22     "???76"

我用谷歌搜索了字符串“EFBBBF”,发现字节序列是 the Unicode "byte order mark" .

When this BOM character, U+FEFF, is serialized in UTF-8 encoding, it becomes an octet sequence of EF BB BF (\xEFBBBF).

果然,当光标位于第一个双引号和 7 之间时,我点击了删除,并且没有字符消失。 (第二次删除删除了双引号,所以我把它放回去。)之后,Integer.parseInt 能够找到整数 76

如果该字符出现在字符串中,您需要调整程序以考虑该字符。

关于java - Android Java - 解析 "76"时出现 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29040070/

相关文章:

c++ - 如何使用 zlib 解压 gzipstream

c++ - 解压缩附加的压缩字符串

java - 读取 oleObject 文件的代码

java - apache karaf 中的 activemq,使用 xbean 加载配置

java - 存储数据表的最佳方式

java - Realm 数据不保存java

java - Java 8 中的递归 lambda 表达式

android - 谷歌地图 v2 在游戏市场发布后不显示

android - 不调用 AsyncTask 的 onPostExecute 方法

c - undefined reference `gzopen` 错误