2015-03-13 71 views
0

我正在使用zbar解碼QR的Android應用程序。 QR的結構是:「SpecificPrefix/[Number]」。Android Java - 分析「76」時的NumberFormatException

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:無效INT: 「76」 我不知道爲什麼它不工作!

在Android 4.1.2上測試過,但它似乎不適用於4.4.2。

在此先感謝任何希望解決問題的人。

+0

在猜測,我敢打賭,你有你的字符串中的隱形字符。檢查這篇文章,也許嘗試在特定的字符串。 http://stackoverflow.com/questions/6198986/how-can-i-replace-non-printable-unicode-characters-in-java – DrewJordan 2015-03-13 19:17:56

+0

你是否嘗試用'id = Integer.parseInt(d.substring( 。QRUri.length())修剪());'? – MrEngineer13 2015-03-13 19:18:05

回答

1

將整個字符串複製到Eclipse中以測試此問題後,我可以複製此問題。我在TextPad中以「二進制模式」打開了源代碼,看看字符串中是否有一些奇怪的字符,並且確實存在。

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

我用Google搜索字符串「EFBBBF」,發現字節該序列是the Unicode "byte order mark"

當此BOM字符U + FEFF以UTF-8編碼序列化時,它將成爲EF BB BF(\ xEFBBBF)的八位位組序列。

果然,當我的光標位於第一個雙引號和7之間時,我點擊刪除,並且沒有字符消失。 (第二次刪除刪除了雙引號,所以我把它放回去。)之後,Integer.parseInt能夠找到整數76

如果該字符出現在字符串中,則需要調整程序來解釋此字符。

+0

謝謝,我嘗試的第一件事是修剪字符串,但這些字符不是空格。錯誤發生在QR上:我使用CSV文件的py腳本構建QR,第一行是76行! – DarioDF 2015-03-13 20:00:54