如何使用j2me api解析包含负数的字符串?

9

我有一个含数字的字符串。我需要解析这个字符串并将这些数字存储在int、float等类型的变量中。

String str = "100,2.0,-100,19.99,0";

我可以通过拆分后使用Integer.parseInt()Float.parseFloat()来实现,但是对于负数我无法处理。它会抛出异常java.lang.NumberFormatException。在搜索网络后,我没有找到任何解决这个问题的方法。

那么,如何使用j2me api set解析字符串中的负整数并存储为int?


混淆的表述:“在分割之后我可以做到这一点”,显然,你需要在逗号上分割才能将任何内容解析出来。 - aioobe
2
Float.parseFloat() 应该可以工作,您能提供一些更多的代码/上下文来解释异常吗? - Thomas
你考虑过使用String.startsWith方法吗?例如 if (myString.startsWith("-")) { myString = myString.substring(1); } - gnat
5个回答

18

解析负数与正数相比没有什么特别之处。

float f = Float.parseFloat("-1.0");

上面的代码应该完全正常工作。

你的代码可能有问题的是,你试图使用错误的小数分隔符解析浮点数。如果你的语言环境中使用.作为小数分隔符,则上面的代码是可以的。但是,如果你的语言环境中使用,作为小数分隔符,则解析将失败(出现NumberFormatException)。

因此,请确保正确拆分原始内容,并检查拆分后的每个部分是否具有正确的格式(例如使用正确的小数分隔符)。

更新:
如果你想知道如何使用特定语言环境解析数字,例如可以参考这个问题


2

今天我遇到了类似的问题,问题是输入字符串中的减号实际上是一个短划线字符。那真是讨厌!所以这个问题值得检查。


1

澄清:嗯,我以为你想区分int和float。只需要使用Float.parseFloat(..)就可以了,不需要进行contains测试。 :) 误读了!

    String str = "100,2.0,-100,19.99,0";
    String[] ns = str.split(",");
    for(String s: ns){
        if(s.contains("."))
            System.out.println("Float: "+ Float.parseFloat(s));
        else
            System.out.println("Int: "+ Integer.parseInt(s));
    }

输出

Int: 100
Float: 2.0
Int: -100
Float: 19.99
Int: 0

更新 所以这样:

    String str = "100,2.0,-100,19.99,0";
    String[] ns = str.split(",");
    for(String s: ns)
            System.out.println("Float: "+ Float.parseFloat(s));

同样适用。


0
你可以通过逗号','进行分割,并检查是否有负号,如果有则将数字乘以-1或者使用其他方法。
Float parseFloat(str);

它将正常工作。


0

很奇怪,可能是编码问题。Integer.parseInt()应该可以处理正数和负数,以及其他类似的方法(Float.parse ...)。 你可以在解析之前始终检查符号'-'或'+',并在解析后分配符号。 此方法有其优点,因为如果您收到带有“+”符号的数字,则标准的Integer.parseInt将无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接