如何检查userInput命令中的特定部分?

2022-03-15 00:00:00 java java.util.scanner

我正在试着做一个游戏..当有人在控制台中键入命令时,我希望命令中有[args]。

例如:

~修复[用户名][运行状况]

以下是示例代码(如果您有答案,请参考此代码):

import java.util.Scanner;
class StackOverflowExample {
  public static void main(String[] args) {
    System.out.println("Healing Command: ~heal [username] [health]");
    int player1HP = 0;
    Scanner userInteraction = new Scanner(System.in);
    String userInput = userInteraction.nextLine();
    if (userInput.equals("~heal " /**+ username + num**/) /**How do I make it so that a number(the amount to heal) and a username(player username) can be inputted after?**/){
      player1HP += 0; /**I need the number that the user inputs to be added to player1HP**/
    }
    System.out.println("player1/**I want this to be the username value**/ is at: " + player1HP/**I want this to be the hp value + player1HP**/ + " hp.");//I want this command to print out "ProGamer is at: 3 hp."
    
  }
}

输出:

如何获取";username";和";Health";的值?


解决方案

可以使用regular expression确保输入有效。

然后可以调用方法split将命令分成单独的单词。

import java.util.Scanner;

public class StackOverflowExample {
    public static void main(String[] args) {
        System.out.println("Healing Command: ~heal [username] [health]");
        int player1HP = 0;
        Scanner userInteraction = new Scanner(System.in);
        String userInput = userInteraction.nextLine();
        if (userInput.matches("^~heal [^ ]+ \d+$")) {
            String[] parts = userInput.split(" ");
            int health = Integer.parseInt(parts[2]);
            player1HP += health;
            String player = parts[1];
            System.out.printf("%s is at: %d hp.%n", player, player1HP);
        }
    }
}

正则表达式检查输入的命令是否以~heal开头,后跟一个空格,后跟一个或多个不是空格的字符,然后是另一个空格,后跟一个或多个数字。

然后在空格上拆分输入的命令,这将返回一个三元数组,其中第一个数组元素是命令(即~heal),第二个元素是玩家姓名,最后一个元素是生命值。

相关文章