我正在分割一个字符串,并要求它的合理部分。该程序有时会打印出来,但有时会打印出错误。
val = myPort.readStringUntil('\n');
// i'm reading strings of the form X104XY-1244YZ-18716Z
// with variable numbers between the letters coming from
// my sensor, i'm spliting to get the integers with their
// sign, it works but sometimes shows that error
String[] X-integer = val.split("X");
String[] Y-integer = val.split("Y");
String[] Z-integer = val.split("Z");
print(X-integer[1].trim());
print(Y-integer[1].trim());
print(Z-integer[1].trim());
Gere是完整的代码。有时我的传感器输出“空”,我尝试过:
import processing.serial.*;
import java.awt.Robot;
Serial myPort;
String val;
void setup()
{
String portName = Serial.list()[1];
myPort = new Serial(this, portName, 9600);
}
void draw()
{
if ( myPort.available() > 0)
{
val = myPort.readStringUntil('\n');
}
// print(parts[2].trim()); // STRING_VALUES
if (val != "null") {
String[] Xs = val.split("X");
String[] Ys = val.split("Y");
String[] Zs = val.split("Z");
print(Xs[1].trim());
print(" ");
print(Ys[1].trim());
print(" ");
print(Zs[1].trim());
print(" ");
print(" ");
print(val);
}
delay(15); // was 15
}
答案 0 :(得分:0)
在检查传感器的输出后,我已解决此问题。 放慢输出速度后,我说它提供的第一个输出始终缺少Z坐标,这意味着没有第三次分割,这就是为什么我的代码失败的原因,您的代码对我不起作用,因为您的代码是针对3个坐标制作的,我通过添加来解决这个问题 if(parts.length == 3){}在我的代码周围,代码变成了: (我将其拆分为一个单独的函数,它将替换s = 0 / s = 1,这是返回-1的替换
import processing.serial.*;
import java.awt.Robot;
Serial Port;
String val;
int s=1; //for canceling out nulls and empty values
void setup(){
String Bluetooth = Serial.list()[1];
Port = new Serial(this, Bluetooth, 9600);
}
void draw(){
if ( Port.available() > 0){
val = Port.readStringUntil('\n');
if (val == null || val.trim().isEmpty()) { s=0; }
if(s==1){
String[] parts = val.split(" ");
println("");
print(val);
print(parts.length);
print(" ");
if(parts.length == 3){
String x = parts[0];
String y = parts[1];
String z = parts[2];
print(x);
print(" ");
print(y);
print(" ");
print(z); }
}
s=1;
delay(1); // 15
}
}