簡體   English   中英

使用Java Double.parseDouble和Android中的相同方法有區別嗎?

[英]Is there a difference when using Java Double.parseDouble and the same method in Android?

我問的原因是因為我在Android應用程序和Java程序中做相同的事情(收集潮汐數據)時有2個完全相同的代碼位:

String[] string4 = tide4.replaceAll("[LmH]", "").split(" ");
         Time4 = string4[0];
         String height4 = string4[1].replaceAll("\\s", "");

         System.out.println("HEIGHT4 = " + "'" + height4 + "'" );

        //Convert the Meters into feet for tide heights
      double heightM4 = Double.parseDouble(height4); //FAILS ON THIS LINE IN **JAVA** NOT IN ANDROID

異常: java.lang.NumberFormatException: For input string: "6.24 "

但是,在我的機器上運行的Java程序中,解析時失敗了嗎? 在Android中,它運行良好。 我注意到測試時有一點不同。 當在我的機器上以eclipse打印“ height4”的值時,它會輸出如下內容: HEIGHT4 = '6.24 ' <--Notice the space! 在Android中,它輸出以下內容: HEIGHT4 = '6.24'<--No Space? 除了它們運行的​​平台(據我所知)之外,這兩位代碼之間沒有什么不同。 這可能是什么原因? 與該不可移動的空白有關?

這可能是什么原因? 與該不可移動的空白有關?

我認為這與這個神秘角色有關。 顯然不是數字或數字中有效的其他字符之一,這肯定會導致解析錯誤。

您需要做的是使用調試器或一些跟蹤打印來找出神秘字符。 例如:

    char last = height4.charAt(height4.length() - 1); 
    System.out.println("The last character codepoint is " + ((int) last));

然后將代碼點轉換為十六進制並在http://unicode.org的Unicode表中查找

完成此操作后,您可以弄清楚謎團的來歷和/或消除謎團的最佳方法是什么。


忠告:如果我願意,我將專注於弄清楚角色來自何處。 您正在獲取奇怪的東西的事實令人擔憂,並指出了其他問題的可能性。 如果您只是想擺脫不良的東西,那么您可能會在地毯下掃除更大的問題。 例如,使其更難找到。


更新 0x00A0代碼點是LATIN-1補充中的“不間斷空格”(NBSP)字符:

  • String.trim()方法不會刪除它。 它僅刪除ASCII控制代碼; 0x00000x0020

  • Pattern實現的正則表達式語言中, "\\\\s"與所有Unicode空間變體都不匹配。 這個問題有解決方案: Java正則表達式匹配_all_個空格字符

NBSP的存在不像“隨機字符”那樣麻煩,但是它表明您正在“渲染”來自渲染文本(例如HTML)的輸入,並且兩個平台之間的渲染或抓取過程有所不同。 雖然本身不必擔心,但您需要牢記這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM