【问题标题】:Processing - when parsing string to float NullPointerException is thrown处理 - 将字符串解析为浮点数时抛出 NullPointerException
【发布时间】:2016-02-14 06:35:50
【问题描述】:

我有一个字符串-0.06,0.00,-0.99。我想将第一个数字解析为浮点数。

我正在使用:

String myString = "-0.06,0.00,-0.99";
float myFloat = float(split(myString, ",")[0]);
println(split(myString, ",")[0]); // prints -0.06

第二行抛出NullPointerException

我也尝试了以下方法并得到了完全相同的错误。

 float myFloat = Float.parseFloat(split(myString, ",")[0]);

如何在不获取NullPointerException 的情况下将字符串解析为浮点数。

实际 MVCE:

我正在使用处理来逐行从我的串行中获取输入。第一个输入是"-0.06,0.00,-0.99"

buffer = port.readStringUntil('\n'); //take input from serial til line-break

float[] acceleration;
if (buffer != null) {
  if (buffer.indexOf(",") != -1) {
    buffer = trim(buffer);
    acceleration[0] = float(buffer.split(",")[0]); // this throws the error
  }
}

【问题讨论】:

  • 这两行都为我打印-0.06。请发布包含您正在运行的代码的MCVE
  • 可能是这样的:accelleration[0] 抛出 NPE,因为 accelleration 没有初始化。
  • 这样就解决了!非常感谢。我真是太愚蠢了。

标签: java parsing nullpointerexception floating-point processing


【解决方案1】:

Java 包含围绕primitive 类型的包装类。例如,有一个包装了float 原语的Float 类。这些包装类具有valueOf(String s) 函数,可以将这些primitive 类型的String 表示解析为它们实际的primitive 形式。如果格式正确,调用Float.valueOf(stringRepresentationOfAFloat) 将为您提供float 变量。

请参阅下面的代码以获取示例:

    String floatCsv = "-0.06,0.00,-0.99";
    String [] floatCsvSplit = floatCsv.split(",");
    for(String floatStringValue : floatCsvSplit){
        float floatVariable = Float.valueOf(floatStringValue);
        System.out.println(floatVariable);
    }

【讨论】:

【解决方案2】:

试试这个:

String myString = "-0.06,0.00,-0.99";
float myFloat = Float.parseFloat(myString.split(",")[0]);
System.out.println(myFloat); // prints -0.06

【讨论】:

  • 这是处理,而不是 Java。请参阅split() 函数的参考:processing.org/reference/split_.html
  • 我认为使用 Processing 的包装函数或 Java 的原始 String 方法应该没问题,只要点 get 跨越。
  • @GeorgeProfenza 我不反对。但是 OP 的问题与 parse()Float.parseFloat() 函数无关,所以这个答案并没有太大帮助。
  • true,错误是空指针异常,所以未初始化的数据正如肯尼 4 天前指出的那样
【解决方案3】:

您是否正在运行 Java 1.7?该版本中有一个错误,已在 1.8 中解决,其中String.split() 在数组的开头返回一个空元素。

尝试打印split(myString, ",");您应该会看到类似 ["", "-0.06", "0.00", "-0.99"] 的内容。

更多信息请参见this SO question

【讨论】:

  • 好吧,值得一试;-) 所以,如果你打印split(myString, ","),你会看到["-0.06", "0.00", "-0.99"]
  • 嗯...我运行了这个println(split(myString, ",")); ,它输出-0.06 0.00 -0.97。奇怪的是使用System.out.println(split(myString, ",")) 给了我[Ljava.lang.String;@1c9570e4
  • 第二个 println 需要使用 Arrays.toString
  • 这是处理,而不是 Java。 println() 函数可以很好地处理数组。
  • @KevinWorkman System.out.println 是 Java、AFAIK - 以及 [Ljava.lang.String;@1c9570e4
猜你喜欢
  • 2021-06-30
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 2020-08-30
相关资源
最近更新 更多