Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Java+;Android)解析字符串以浮动奇怪错误_Java_Android_String_Parsing - Fatal编程技术网

(Java+;Android)解析字符串以浮动奇怪错误

(Java+;Android)解析字符串以浮动奇怪错误,java,android,string,parsing,Java,Android,String,Parsing,这听起来可能是个微不足道的问题,但我真的很难弄明白。基本上,我正在将一个字符串从我的Android发送到我的PC。所有连接都正常,字符串传输成功。这是Android代码(向计算机发送字符串): 如果rotZ是我想要发送的,它是一个“float”值。我需要将“\n”放在邮件的末尾,以便在PC上识别为完整邮件。到目前为止,一切正常。现在我想在我的电脑上阅读这篇文章,这是通过以下方式实现的: //BlueTooth String lineRead = ""; try { lin

这听起来可能是个微不足道的问题,但我真的很难弄明白。基本上,我正在将一个字符串从我的Android发送到我的PC。所有连接都正常,字符串传输成功。这是Android代码(向计算机发送字符串):

如果rotZ是我想要发送的,它是一个“float”值。我需要将“\n”放在邮件的末尾,以便在PC上识别为完整邮件。到目前为止,一切正常。现在我想在我的电脑上阅读这篇文章,这是通过以下方式实现的:

  //BlueTooth
  String lineRead = "";
  try
  {
    lineRead = new String(sampleSPPServer.readFromDevice());
    if(lineRead != null && !lineRead.isEmpty())
    {
      String lineTransf = lineRead.replace("\n", "").replace("\r", "").replace(" ", "").replace("\"", "").trim();
      println("LineTransf: " + lineTransf);
      rotZ += 0.01*(Float.parseFloat(lineTransf));
      println("Zrotation: " + rotZ); //Never gets here, throws and error before...
    }
    else
      rotZ += 0;
  }
  catch(Exception e)
  {
    println("Exception: " + e);
  }
这给了我一个错误:

NumberFormatException: invalid float value: "1.1400002"
在我的代码中,您可以看到我检查null、empty等,所以这不是问题所在。我已经试过了:

  NumberFormat nf = NumberFormat.getInstance(Locale.US);
  rotZ += 0.01*(nf.parse(lineTransf).floatValue());
得到了同样的结果。。。在stackoverflow中有一个类似的问题:

如果我尝试代码,还有一件奇怪的事情:

  for(int i = 0; i < lineTransf.length(); i++)
    println(lineTransf.substring(i,1));
更奇怪的是,当我对控制台中出现的数字“1.1400002”执行ctrl-c、ctrl-v时,它只在堆栈溢出上粘贴“1”。
我知道这个数字是对的,但在某些地方,转换是不正确的。我想这是因为字符串作为字节发送,作为字符串读取,但是我如何解决这个问题呢?提前谢谢

没什么奇怪的。这是
子字符串
的预期行为。它抛出一个
IndexOutOfBoundsException
,如果
startIndex
为负,则
endIndex
大于字符串长度,或者如果
startIndex
大于
endIndex
(这是您的情况)。在我看来,您似乎想在索引处打印字符。试一试

for(int i = 0; i < lineTransf.length(); i++)
    println(lineTransf.charAt(i));
for(int i=0;i
我找到了一个解决办法,但我真的,真的想得到一个解释(如果可能的话),因为这太难看了。。。我将代码更改为:

//BlueTooth
  String lineRead = "";
  try
  {
    lineRead = new String(sampleSPPServer.readFromDevice());
    if(lineRead != null && !lineRead.isEmpty())
    {
      String lineTransf = lineRead.replace("\n", "").replace("\r", "").replace(" ", "").replace("\"", "").trim();
      println("LineTransf: " + lineTransf + " " + lineTransf.length());
      String lastTry = "";
      for(int i = 0; i < lineTransf.length(); i++)
      {
        if(lineTransf.charAt(i) != ' ' && lineTransf.charAt(i) != '\u0000')
        {
          println(lineTransf.charAt(i));
          lastTry += lineTransf.charAt(i);
        }
      }
      println("LastTry: " + lastTry);
      rotZ += 0.01*(Float.parseFloat(lastTry));
      println("Zrotation: " + rotZ);
    }
    else
      rotZ += 0;
    //System.out.println("Line Read:" + lineRead);
  }
  catch(Exception e)
  {
    println("Exception: " + e);
  }

如果他们通过了这个测试,我会单独“组装”最后的字符串。似乎蓝牙正在整个字符串的每个字符之间发送一个空字符。我不明白为什么会发生这种情况,它实际上在读取传入字符串时消耗了一些时间。如果有人有其他想法,我真的很想得到另一个答案…

对不起,你是对的,我做了更改,它打印:lineTransf:1.8399,然后是1。8 3 9 9,但仍然给出长度19和异常:java.lang.NumberFormatException:用于输入字符串:无需担心。哪个部分不工作?“1.8399”和“1.1400002”都是有效的parsable,这就是我不理解的。行println(“LineTransf:+LineTransf”);打印这些数字,但rotZ+=0.01*(Float.parseFloat(lineTransf));无论我做什么,都会给我数字格式的感觉。我明白了。但是那19个角色也很奇怪,不是吗?可以打印
println(“LineTransf:+LineTransf+“size”+LineTransf.length())?它精确地将其打印到控制台:LineTransf:9.959991尺寸15对于其他数字,它会打印数字和更大的尺寸(如上所示)
for(int i = 0; i < lineTransf.length(); i++)
    println(lineTransf.charAt(i));
//BlueTooth
  String lineRead = "";
  try
  {
    lineRead = new String(sampleSPPServer.readFromDevice());
    if(lineRead != null && !lineRead.isEmpty())
    {
      String lineTransf = lineRead.replace("\n", "").replace("\r", "").replace(" ", "").replace("\"", "").trim();
      println("LineTransf: " + lineTransf + " " + lineTransf.length());
      String lastTry = "";
      for(int i = 0; i < lineTransf.length(); i++)
      {
        if(lineTransf.charAt(i) != ' ' && lineTransf.charAt(i) != '\u0000')
        {
          println(lineTransf.charAt(i));
          lastTry += lineTransf.charAt(i);
        }
      }
      println("LastTry: " + lastTry);
      rotZ += 0.01*(Float.parseFloat(lastTry));
      println("Zrotation: " + rotZ);
    }
    else
      rotZ += 0;
    //System.out.println("Line Read:" + lineRead);
  }
  catch(Exception e)
  {
    println("Exception: " + e);
  }
if(lineTransf.charAt(i) != ' ' && lineTransf.charAt(i) != '\u0000')