我收到一個數據包如Java中高效的字符串讀取?
"c~ ¹" M:0013A20040559361 Ax:48 Ay:10 Az:1012 Tp:25 B:45 ? Tm:Wednesday, 02/01/13 - 16:16.57 Sº~"
和其他字符,無法粘貼。我必須閱讀冒號後的值。例如,M: , Ax:, Ay:
並將其存儲或繪製在圖形中。我知道兩種方式:StreamTokenizer或簡單的Java邏輯。問題是我已經嘗試了兩種方法,但在閱讀值時仍然收到太多錯誤。另外,我嘗試了一個字符串垃圾收集器,它不工作。
下面是代碼爲兩個:
if(message2.contains("Ax:"))
{
int index = message2.indexOf("Ax:");
String Ax = message2.substring(index+3);
ChartAcceleration.tsAx.addOrUpdate(new Millisecond(), Double.valueOf(Ax));
}
StreamTokenizer Code:
StreamTokenizer st = new StreamTokenizer(
new StringReader(message));
boolean eof = false;
while(st.nextToken() != StreamTokenizer.TT_EOF){
int token = st.nextToken();
switch (token) {
case StreamTokenizer.TT_WORD:
String word = st.sval;
if(word.contains("Ax"))
{
Ax = true;
}
else
if(word.contains("Ay"))
{
Ay = true;
}
else
if(word.contains("Az"))
{
Az = true;
}
else
if(word.contains("P"))
{
P = true;
}
else
if(word.contains("B"))
{
B = true;
}
else
if(word.contains("Tp"))
{
Tp = true;
}
else
{
Ax = false;
Ay = false;
Az = false;
P = false;
B = false;
Tp = false;
}
// System.out.println("Word: " + word);
break;
case StreamTokenizer.TT_NUMBER:
double number = st.nval;
if(Ax)
{
Ax = false;
// errorChecker(AxStr,number);
AxStr = number;
Sender.publishAccelerator("Ax:" + String.valueOf(AxStr));
}
else
if(Ay)
{
Ay = false;
AyStr = number;
Sender.publishAccelerator("Ay:"+String.valueOf(AyStr));
}
else if(Az)
{
Az = false;
AzStr = number;
Sender.publishAccelerator("Az:"+String.valueOf(AzStr));
// System.out.println("Az:"+AzStr);
}
else
if(P)
{
P = false;
PStr = number;
Sender.publishPressure(String.valueOf(PStr));
//System.out.println("P:"+PStr);
}
else
if(B)
{
B = false;
BStr = number;
Sender.publishBattery(String.valueOf(BStr));
}
else
if(Tp)
{
Tp = false;
TpStr = number;
Sender.publishTemp(String.valueOf(TpStr));
}
break;
default:
}
}
你不能使用REGEX有2個組,一個返回什麼是betfore':',第二個組返回值? –
什麼是「字符串垃圾收集器」? –
你確定你沒有字符編碼的問題嗎?你會得到什麼樣的「錯誤」? – Flavio