java.lang.NumberFormatException:对于输入字符串:“9813023219”

时间:2013-04-18 07:05:53

标签: java string processing

我正在使用串行事件将从arduino读取的rfid标签传递给处理。在串行事件中,我正在解析并将变量转换为整数。这大部分工作,只有一张rfid卡不会出错。

void serialEvent(Serial thisPort)
{
  String inString = thisPort.readString();
  if(inString != null)
  {
    Serial connect1 = (Serial) connections.get(0);
      if(thisPort == connect1 )
      {
        Chair chair = (Chair) chairs.get(0);
        if(inString.contains("UID Value:"))
        {
          int p2 = inString.indexOf(":");
          String pString = inString.substring(p2+1); 
          String pString2 = pString.substring (0,10);
          //println(pString2);
          pString2.trim();

          println("String length: " + pString2.length());

          chair.setRFID(pString2);
          println(pString2);
        }

      }
  }
}

void setRFID(String r)
  {  
     try{
       this.rfid = Integer.parseInt(r);
     }
     catch (Exception e) {
      e.printStackTrace();
     }

     //set position of person to chair
     for (Person person : people)  
     { 

        //println(this.rfid != chair.rfid);
        //println(this.rfid + "," +  "person: " + person.ID + "," + person.RFID);
        if(this.rfid == person.RFID)
        {
          person.setPos(this.pos);
          this.personID = person.ID;
        }
     }
  }

try-catch无法正常工作,此行导致问题this.rfid = Integer.parseInt(r);.我认为它可能是一个格式错误的字符串,但字符串似乎没问题。这里检查字符串一致性的结果: 字符串长度:10 1811524219 字符串长度:10 1942302231 字符串长度:10 1010368230 字符串长度:10 9813023219

4 个答案:

答案 0 :(得分:6)

9813023219无效Integer,因为它大于Integer.MAX_VALUE,即2147483647。请改用LongMAX_VALUE9223372036854775807

答案 1 :(得分:2)

您已超过整数的最大值。我建议改用long

通过显示Integer.MAX_VALUE来检查这一点 - 没有int可以超过此值。

当给定字符串与预期布局不匹配时,抛出

java.long.NumberFormatException

答案 2 :(得分:1)

数字9813023219超出了int数据类型的范围,请尝试将您的数据类型更改为long,并且它应该有效。

答案 3 :(得分:1)

9813023219是无效的整数,您可以使用Long满足您的要求。如果RFID不超过Long.MAX_VALUE。