【问题标题】:Processing String To Int Conversion Error处理字符串到 Int 的转换错误
【发布时间】:2014-12-12 14:46:46
【问题描述】:

我有一些简单的处理代码,可以读取传入的串行数据,将其写入字符串,然后根据字符串中包含的内容,将字符串转换为 int 或 char 并执行一些特定代码。

我的问题是,当我尝试将数据转换为整数时,它要么给我一个错误,要么给我一个零值( int(string) 返回零, Integer.parseInt(string) 返回一个错误)。以下是我的代码的相关部分。

String serialreadbuffer;
int t = 0;
boolean STimer = false;

// Serial Message Display (From Controller)
if (myPort.available() > 0) 
{  // Check if data is available
  serialreadbuffer = myPort.readStringUntil('\n');         // read it and write to variable
  if (serialreadbuffer.charAt(0) == 'I')
  {
    SerialText.setText("INITIALIZED");
    t = 0;
    STimer = true;
  }
  else if (serialreadbuffer.charAt(0) == 'U')
  {
    SerialText.setText("UPDATED");
    t = 0;
    STimer = true;
  }
  else if (serialreadbuffer.charAt(0) == 'D')
  {
    SerialText.setText("DISABLED");
    t = 0;
    STimer = true;
  }
  else if (serialreadbuffer.charAt(0) == 'E')
  {
    SerialText.setText("SERIAL COMMUNICATION ERROR");
    t = 0;
    STimer = true;
  }
  else
  {
    int numberbuffer = Integer.parseInt(serialreadbuffer) * 60 / 6144;
    serialreadbuffer = str(numberbuffer);
    RPMText.setText(serialreadbuffer);
  }
}

奇怪的是,如果我将一个字符串值直接分配给 serialreadbuffer(即 serialreadbuffer = "6144"),它会起作用,但如果我从我的串行端口获得相同的数字,它会给我以下错误:

NumberFormatException: For input string: "6144"

它给了我以下行的错误:

int numberbuffer = Integer.parseInt(serialreadbuffer) * 60 / 6144;

我也遇到了 string.equals() 比较的问题(即使字符串相同,它也总是返回 false),但是我通过将第一个字符转换为 char 并使用它进行比较来解决这个问题。不确定这是否与此问题有关。

我搜索了互联网并没有找到任何帮助。我不是一个经验丰富的程序员,所以也许这是我没有看到的显而易见的事情。非常感谢您的帮助。

【问题讨论】:

  • 字符串末尾是否有\r 的可能性?尝试在解析之前记录字符串的长度......或者理想情况下转储整个字符串,一次一个 char,打印每个 charint 值(如果你明白我的意思),这样你就可以看到正是那里有什么。
  • 所以当我一次打印一个字符的 int 值时,它给了我 54、49、52、52、13、10。从这里你可以清楚地看到它也给了我一个长度6. 所以它似乎有一些不可打印的字符挂在最后。使用从 0 到 (length-2) 的子字符串来处理这个问题的最佳方法是什么?那么这些额外的字符是来自我的串行数据吗?
  • 看起来您的 readStringUntil 方法在末尾包含 \r\n。你可能想解决这个问题...
  • 修剪那些多余的字符起到了作用,它现在似乎可以工作了。我使用 substring 方法来修剪它们,但是正如您所指出的,我可能应该从源头修复它并使用完全排除这些字符的读取方法。非常感谢!

标签: java string int processing data-conversion


【解决方案1】:

在解析之前修剪字符串插入

int numberbuffer = Integer.parseInt(serialreadbuffer) * 60 / 6144;

int numberbuffer = Integer.parseInt(serialreadbuffer.trim()) * 60 / 6144;

您可能有不可打印的字符,例如\r 在里面。

【讨论】:

  • 不幸的是,修剪似乎没有解决问题,我仍然遇到同样的错误。
  • @JasonAbbas:你只是在字符串上调用了trim(),还是对结果做了什么?
  • 好点我更新了我的答案!他可能会在另一条线上这样做!
  • 好点。我只是在字符串上调用了 trim(),而不是使用结果。 trim() 确实有效。再次感谢!
【解决方案2】:

值可能有一些空间。尝试在转换前修剪字符串。

Serialreadbuffer.trim()

【讨论】:

  • 不幸的是,修剪似乎没有解决问题,我仍然遇到同样的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 2012-08-22
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多