0

サーバーからクライアントに文字列を渡す必要があります。文字列は「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");
    }
}
4

3 に答える 3

0

それを含む文字クラスを.「何でも」ワイルドカードとして解釈されないようにすると、文字通りピリオドとして解釈されます。P1,あなたのメッセージは「その後にゼロ以上が続く」と完全には一致しません。そのため、そのブロックには入りません。.*角かっこなしで「0回以上一致する」だけの場合。一般的にはそれよりももう少し具体的にするのが賢明ですが!

于 2013-03-04T22:49:33.200 に答える
0

Pで始まり、1つまたは複数の数字、コンマ、区切り文字、その他の文字が続く文字列を照合したいとします。

次のコードはおそらくトリックを行います:

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

さらに、一致するブロックを使用して、プレーヤーのIDとプレイされたカードを取得できます...

正規表現をチェックするために使用できる正規表現テストサイトは多数あります。ここに1つありますhttp://www.regexplanet.com/advanced/java/index.html

于 2013-03-04T22:49:59.793 に答える
0

方法を使用する代わりに、を使用することmatches()をお勧めしstartsWith()ます。したがって、の代わりにをmessage.matches("P1, [.]*"))使用できますmessage.startsWith("P1")

カード情報を解析するには、番号とカードタイプの間に別のコンマ(および空白)を使用することをお勧めします。Integer.parseInt(split[1])次に、番号とsplit[2]タイプに対して呼び出す必要のある分割関数を簡単に使用できます。

于 2013-03-04T22:50:32.557 に答える