最近做到一个东西,采用Java串口通信,读取到一串十进制的数据 如下:36.536.236.436.1,实际我想要其显示的是
36.5 36.2 36.4 36.1,然后再对这四个数值进行平均取值处理显示,由于初学JAVA,所以希望能得到论坛朋友的帮助,我的相关程序如下,不知道该怎么改。我的QQ是330598852
byte[] readBuffer = new byte[20];
int numBytes=0;
String readStr="";
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
}
try {
while (inputStream.available() > 0) {
numBytes = inputStream.read(readBuffer);
} //while end
str = new String(readBuffer);
for(int iii=0;iii<numBytes;iii++){
readStr=readStr + Byte.toString(readBuffer[iii]);
}
recText.append(str + "\n");
recText.append(readStr+"\n");
recText.append(readBuffer+"\n");
} catch (IOException e) {
}
}
[size=x-large][color=red]我看你是要小数点后一位小数,是吧....
下面的代码jdk1.5运行OK...[/color][code="java"][/size]
package com.test;
/**
[/code]
[size=large][color=red]希望对你有所帮助..[/color][/size]
然串口的数据格式变化一下,每个数字之间用逗号分割,这样你就可以解析了。
另外,如果串口的数据格式不可变化,那需要确认单元数据的长度或者特征,比如只允许小数点后面一位等,这样也可以实现解析。
假设只允许小数点后面一位:
[code="java"]
int next = Integer.MAX_VALUE;
String src = "36.536.236.436.1";
ArrayList result = new ArrayList();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < src.length(); i++) {
char ch = src.charAt(i);
if(ch == '.'){
next = 1;
}
sb.append(ch);
if(next > 0){
next -- ;
}
else{
result.add(sb.toString());
sb.setLength(0);
next = Integer.MAX_VALUE;
}
}
for (String string : result) {
System.out.println(string);
}
[/code]