我将此字符串从客户端发送到服务器:
Ar|0.04107356|-0.31299785|-0.9991561
该字符串由服务器打印出来 - 所以它是正确的。
“Ar”是数据包名称,值是射手将要射击的箭头的速度。
所以要获得这些值,我正在使用
String[] values = str.split("|");
然后
a.shoot(Float.valueOf(values[1]), Float.valueOf(values[2]), Float.valueOf(values[3])); //a is an archer
问题是,值1,值[2]和值[3]似乎已损坏或无法识别。
我的完整代码是:
public void handleMessage(String str){
System.out.println(str);
String[] values = str.split("|");
if (values[0].contains("Ar")){
System.out.println("X: " + values[1] + " Y: " + values[2] + " Z: " + values[3]);
}
System.out.println("Vals: " + values[0] + " " + values[1] + " " + values[2] + " " + values[3]);
if (true) return; //Returning so I can analyze de-bug messages without crashes.
for (Archer a : GameServer.archers){
a.shoot(Float.valueOf(values[1]), Float.valueOf(values[2]), Float.valueOf(values[3]));
}
当我打印出“Vals”消息时,它会出现如下:
Vals: A r |
这里出了什么问题?
答案 0 :(得分:5)
水平条在Java正则表达式中具有特殊含义,您必须将其转义才能用作文字:
String[] values = str.split("\\|");