.split(“|”)不返回正确的字符串

时间:2015-03-17 13:08:35

标签: java

我将此字符串从客户端发送到服务器:

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 |

enter image description here

这里出了什么问题?

1 个答案:

答案 0 :(得分:5)

水平条在Java正则表达式中具有特殊含义,您必须将其转义才能用作文字:

String[] values = str.split("\\|");