默认情况下,Scanner 使用一个或多个空格作为分隔符,用于分隔标记,因此next 返回表示整个单词的标记,而不是单个字符。
如果您希望next 返回单个非空白字符,则可以将分隔符设置为
- 一系列空格(
\s+ 在正则表达式中,其中\ 需要在字符串中写为"\\")
或
但由于zero OR one or more of X 与zero or more of X 相同,而不是+ 在正则表达式中表示“一次或多次出现”,我们可以使用* 表示“零次或多次出现”。所以代表我们的分隔符的正则表达式可能看起来像\s+(在字符串文字中需要写成"\\s+",因为\需要被转义)
演示:
Scanner scan = new Scanner(System.in);
scan.useDelimiter("\\s*");
System.out.println("Enter commands U(up),D(down),L(left),R(right)");
String command = scan.next();
if (command.equalsIgnoreCase("U")) {
System.out.println("Do this");
} else if (command.equalsIgnoreCase("D")) {
System.out.println("Do that");
} else {
System.out.println("unknown command: "+ command);
}
根据您的评论,您似乎想要处理作为一个单词传递的一组命令,例如 UDULR,它应该向上、向下、向上、向左和最后向右移动。在这种情况下,您可以像这样组织代码:
private void moveUp(){
//code for moving up:
System.out.println("moving up");
}
private void moveDown(){
//... similar
}
//rest of moving methods...
现在您可以再添加一个方法,让我们根据传递给它的 char 选择要使用的方法:
public void move(char dirrection){
switch(dirrection){
case 'U' : moveUp(); break;
case 'D' : moveDown(); break;
case 'L' : moveLeft(); break;
case 'R' : moveRight(); break;
default: System.out.println("can't move in dirrection: "+dirrection);
}
}
现在在您的代码中,您应该可以使用如下内容:
System.out.println("Enter commands U(up),D(down),L(left),R(right)");
String command = scan.next();
for (char directionCommand : command.toCharArray()){
move(directionCommand);
}