繁体   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