如何将字符串传递给客户端并使用RegEx来决定采取什么操作?

时间:2013-03-04 22:22:37

标签: java regex client-server

我需要将一个字符串从服务器传递给客户端。该字符串以“P1”开头,后跟扑克牌的名称。我想在客户端使用正则表达式检查它是否以“P1”开头,如果是,则从其余字符串中提取卡信息并显示该卡。但是,我似乎无法使用正则表达式来识别传入的字符串。

服务器端:

for(int i = 0; i < players.length; i++) {
    imagePath1 = players[i].getCard(0).getImagePath();
    imagePath2 = players[i].getCard(0).getImagePath();
    output.format("%s\n", "Pocket Cards");
    output.flush();
    output.format("%s\n", "P1, " + imagePath1);
    output.flush();
}

客户方:

public void run() {
    playerNumber = input.nextLine();
    SwingUtilities.invokeLater(
        new Runnable() {
            public void run() {
                lblIdField.setText("You are Player " + playerNumber + ".");
            }
        }
    );
    myTurn = (playerNumber.equals("Player 1"));
    while(true) {
        if(input.hasNextLine()) {
            processMessage(input.nextLine());
        }
    }
}

public void processMessage(String message) {
    if(message.equals("Pocket Cards")) {
        //displayPocketCards("resources/10C.png");
    }
    else if(message.matches("P1, [.]*")) {
        String[] split = message.split(", ");
        displayPocketCards("resources/10C.png");
    }
}

3 个答案:

答案 0 :(得分:0)

当你创建一个包含.的字符类时,它不会被解释为“任何”通配符,它​​会被解释为一个句点。您的邮件与“P1,完全匹配,后跟零或更多。”所以你不要进入那个街区。如果你只想要“匹配任何零次或多次”,那只是.*没有括号。虽然通常明智地比这更具体一点!

答案 1 :(得分:0)

我假设您要匹配以P开头的字符串,后跟一个或多个数字,逗号,分隔符,然后是任何其他字符。

以下代码可能会解决问题:

    ...
    else if(message.matches("^(P)(\\d)+(\\,)(\\s)(.)*")) {
        String[] split = message.split(", ");
        displayPocketCards("resources/10C.png");
    }
}

你可以使用匹配的积木来获取你的玩家的身份证,以及播放的卡片......

您可以使用多个正则表达式测试网站来检查您的正则表达式,这里有一个http://www.regexplanet.com/advanced/java/index.html

答案 2 :(得分:0)

我建议使用matches(),而不是使用方法startsWith()。因此,您可以使用message.matches("P1, [.]*"))代替message.startsWith("P1")

要解析卡片信息,我建议您在数字和卡片类型之间使用另一个逗号(和空格)。然后,您可以轻松使用拆分功能调用Integer.parseInt(split[1])作为数字,split[2]作为类型。