Java-基于字母的独立输入
我一直在找这个,但找不到。我想使用Scanner从Java中的用户获取命令移动输入。用户可以输入U(向上)、D(向下)、L(左)、R(右)。因此,例如,如果用户编写UDULR(没有任何内容将它们分开),那么我希望分别阅读字母。我试着这样做:Java-基于字母的独立输入,java,string,input,char,Java,String,Input,Char,我一直在找这个,但找不到。我想使用Scanner从Java中的用户获取命令移动输入。用户可以输入U(向上)、D(向下)、L(左)、R(右)。因此,例如,如果用户编写UDULR(没有任何内容将它们分开),那么我希望分别阅读字母。我试着这样做: String command; char command; Scanner scan = new Scanner(System.in); System.out.println("Enter commands U(up),D(down),L(left),R(
String command;
char command;
Scanner scan = new Scanner(System.in);
System.out.println("Enter commands U(up),D(down),L(left),R(right);
//command = scan.next();
command = scan.next().charAt(0);
if(command == 'U'){
"Do this"
}
else if(command == 'D'){
"Do that"
}
当我使用此代码时,它只识别第一个字母(在本例中,我理解
charAt(0)
表示第一个字母)。但是,如何获得其他输入呢?我尝试了字符串和字符。您需要将next()
的结果保存在一个变量中;然后,您可以使用它以您想要的任何顺序获取其中的任何字符。默认情况下,扫描仪使用一个或多个空格作为分隔符,分隔标记,因此next
返回表示整个单词的标记,而不是单个字符
如果希望next
返回单个非空白字符,则可以将分隔符设置为
- 一系列空白(
在正则表达式中,其中\s+
需要以字符串形式写入\
)“\\\”
- 空字符串
“”
zero
或一个或多个X
与zero或多个X
相同,因此我们可以使用表示“零个或多个事件”的+
,而不是正则表达式中表示“一个或多个事件”的*
。因此,表示分隔符的正则表达式可能看起来像\s+
(在字符串文本中,它需要写成“\\s+”
,因为\
需要转义)
演示:
根据您的评论,您似乎希望处理作为一个单词传递的一组命令,如
UDULR
,它应该向上、向下、向上、向左、最后向右移动。在这种情况下,您可以像这样组织代码:
private void moveUp(){
//code for moving up:
System.out.println("moving up");
}
private void moveDown(){
//... similar
}
//rest of moving methods...
现在,您可以再添加一个方法,让我们根据传递给它的字符选择要使用的方法:
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);
}
您可能需要类似scan.next().split(“”)的东西,它将为您提供一个命令数组。然后,您可以循环使用这些命令可能重复的“谢谢您的回答”,但我真的不明白,如何将next()的结果保存在变量中?那么如何从该变量中获取字符呢?您认为command=的作用是什么?您认为charAt(i)做什么?command=look charAt(i)是否与输入相同?“此方法返回位于字符串指定索引处的字符。字符串索引从零开始。“因此,基本上command=将在指定索引中查找字符。0,1,2等等,对吗?charAt()就是这样做的;command=*将“该结果”分配给变量命令。谢谢您的回答。如果用户按下例如UD,那么我想打印两个“做这个”和“做那个”,但在本例中它只打印第一个。我猜可能If语句是错误的??我如何解决?在这种情况下,您希望将其作为word阅读(因此无需更改原始分隔符),只需迭代该单词中的所有字符,并对所有字符执行相应操作。将更新我的答案。@toppen我更新了我的答案。如果不希望这些方法依赖于类的实例,则可以将其设为静态方法。
System.out.println("Enter commands U(up),D(down),L(left),R(right)");
String command = scan.next();
for (char directionCommand : command.toCharArray()){
move(directionCommand);
}