java - 在Android中使用Java Double.parseDouble和相同的方法有区别吗?

标签 java 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? 除了它们运行的​​平台之外(据我所知),这两位代码之间没有什么不同。 造成这种情况的原因是什么?与不可删除的空白有关吗?

最佳答案

What could the cause of this be? Something to do with that un-removable whitespace?

我认为这一切都与那个神秘的角色有关。它显然不是数字或数字中有效的其他字符之一,这肯定会导致解析错误。

您需要做的是使用调试器或一些跟踪打印来找出神秘字符是什么。例如:

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

然后将代码点转换为十六进制并在 Unicode 表 http://unicode.org 中查找。

完成此操作后,您就可以找出谜团从何而来和/或摆脱它的最佳方法是什么。

<小时/>

建议:如果我愿意,我会专注于弄清楚角色来自哪里。事实上,你会得到奇怪的东西,这令人担忧,并表明可能出现其他问题。如果你只是想摆脱不好的东西,那么你可能会掩盖一个更大的问题;例如更难找到。

<小时/>

更新 - 0x00A0 代码点是 LATIN-1 补充中的“不间断空格”(NBSP) 字符:

NBSP 的存在并不像“随机字符”那样有问题,但它表明您正在从渲染文本(例如 HTML)中“抓取”输入,并且两个平台之间的渲染或抓取过程存在差异。虽然本身不必担心,但您需要牢记这一点。

关于java - 在Android中使用Java Double.parseDouble和相同的方法有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283084/

相关文章:

java - 是否可以对两个EditText使用[按钮禁用控件的TextWatcher]?

android - 打开 Android 键盘时如何让我的 Cordova 应用程序保持全屏显示?

android - 如何使用Android获取Linux内核的版本?

javascript - 如何链接 RCTCameraRoll for Android

java - java代码的等效vb代码

java - 服务器和客户端之间的密码以明文形式传递

java - java中包含关系运算符的字符串分割

java - 根据分隔符将字符串拆分为 2 个字符串

android - 工具栏标题不显示

Android Gradle - 实现、releaseImplementation 和 debugImplementation 之间的差异