ParseInt处理

时间:2014-12-22 14:44:27

标签: parsing processing

有人可以帮助我理解为什么如果我的val值是"0" Integer.parseInt(val),则返回NumberFormatException,如果我写Integer.parseInt("0")它可以正常工作......

使用Serial?

读取的int值可以更直接地使用这种方法
 void draw(){
     i=0;
     byte[] str = new byte[5];

     if ( myPort.available() > 0) 
     {  
        myPort.readBytesUntil(10, inBuffer);
        if(inBuffer==null){
            //...
        }
        else
        {
            while(inBuffer[i]!=13){
                str[i]=inBuffer[i];
                println((int)str[i]);
                i++;
            }
            String val = new String(str);
            i = Integer.parseInt(val);
            println(i);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

在处理中port.readBytesUntil(ch, buffer)port读取所有字符,直到遇到等于ch的字符。 在Windows行中,分隔符由2个字符(0d,0a)(13,10)组成。

因此,如果您写入序列"23",下一个换行符,下一个"45"等,buffer将如下所示:

char[] buffer : '2', '3', '0x0d', '0x0a', '4', '5', '0x0d', '0x0a', ...

因此当您readBytesUntil(10, ...)时,它会读取3个字符:'2', '3', '0x0d'

考虑这样的例子:

char[] c = {'2', '3', 13};
String str = new String(c);
System.out.println(str);                // you will see "23"
System.out.println(str.length());       // lenght will be 3
System.out.println(Integer.parseInt(str.trim()));   // will be OK
System.out.println(Integer.parseInt(str));  // will throw NumberFormatException

因此,尝试将缓冲区转换为String并将trim()转换为此字符串。

==编辑==

<小时/> Processing为您提供了一些方便的方法,例如:

String str = port.readStringUntil(10);
str = str.trim();

答案 1 :(得分:-1)

你能提供证明问题的MCVE吗?使用硬编码值并尽可能简单,如下所示:

void setup(){
  String val = "0";
  int i = Integer.parseInt(val);
  println(i);
}

在尝试解析之前打印出val的值。我敢打赌,这不是你认为的价值。