用扫描仪打印空间

时间:2017-08-30 14:53:46

标签: java string char java.util.scanner

我是essentiel试图制作一个电影猜谜游戏,有点像刽子手,但你需要猜一个电影的标题。电影标题被编码,每个字符由下划线('_')字符表示。当用户输入正确的字母时,相应字母位置的下划线将更改为该字母。用户使用扫描仪将他的猜测输入为单个字符。 我的问题是一些电影标题包含一个空格('')。但是我无法使用扫描程序返回空格...我的猜测是扫描程序使用空格作为默认分隔符,因此它不会将空格作为字符返回,因为它使用空格将输入分解为标记?

通过'返回空格'我的意思是将空格视为输入,而不是作为分隔符。

任何人都可以给我一个关于如何从用户输入中检测空间的解决方案吗?

此代码应通读movieTitle,然后如果影片标题在索引i处包含空格,并且用户输入是空格,则codedMovieTitle应使用位置i处的空格而不是下划线进行更新。但是这不起作用。当我使用扫描仪进入空间时没有任何反应......

@Component({
    selector: 'vote-component-container',
    templateUrl: 'vote.component.html',
})

export class VoteComponent {
    public model:string;
    public pk:number;
    public constructor(){}
}

这是我的扫描仪的代码:

    for (int i = 0; i < movieTitle.length(); i++) {       
            if(Character.isSpaceChar(movieTitle.charAt(i)) && 
            Character.isSpace(userInput)){
                    encodedMovieTitle = encodedMovieTitle.substring(0, i)
                    + userInput
                    + encodedMovieTitle.substring(i + 1);
            }
    }

我也在努力使我的扫描仪输入不区分大小写。有些电影里面有大写字母。 如果标题是“暴风雪”并且用户输入字符's',则生成的encodedMovieTitle将是“_ _ _ _ s _ _ _ _”,而不是“S _ _ _ s _ _ _ _”

如果有人有一个很棒的解决方案!我发现大多数解决方案都涉及使用字符串,但我使用字符作为我的userInput等,因此我想知道是否存在涉及字符的解决方案。

用于检查的代码是userInput(char)在movieTitle(string)中:

    Scanner scanner = new Scanner(System.in);
    char userInput;
    while(!gameIsWon && (numberOfGuessesLeft != 0)) {
        while (scanner.hasNextInt()) {
            System.out.println("You must enter a single character, try again.");
            scanner.next();
        }
        userInput = scanner.nextLine().charAt(0);

3 个答案:

答案 0 :(得分:1)

您可以通过以下方式从扫描仪获取输入:

Scanner scanner = new Scanner(System.in);
String str;
str = scanner.nextline();

这会将空格作为字符而不是分隔符接受。

希望这会有所帮助:)

答案 1 :(得分:0)

确实,Scannerdocumentation

  

使用分隔符模式将其输入分解为标记,默认情况下匹配空格。

空白也包括空间。

但您可以使用Scanner method轻松修改useDelimiter的分隔符模式,例如:

Scanner s = new Scanner(System.in);
s.useDelimiter("\n");

\n是换行符,在这种情况下意味着Scanner会在用户按下<Enter>时生成新标记。因此空格将按预期返回。

或者,如果您希望Scanner一次返回only 1 character,可以将""设置为分隔符,然后使用s.next()从输入中获取字符:

Scanner s = new Scanner(System.in);
s.useDelimiter("");
String input = s.next(); // this will be only one character

答案 2 :(得分:0)

要匹配字符串,无论情况如何,您都可以使用equalsIgnoreCase()

String movieName = "Snowstrom";
if(str.equalsIgnoreCase(movieName.charAt(0))) {
    // Set the value at appropriate location, 0 in this case
}

if条件中的语句将比较两个字符串,无论其情况如何。无论用户是输入s还是S,上述条件都会评估为真。

<强>更新

您可以按如下方式输入角色:

Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\n");
char userInput;
userInput = scanner.next().charAt(0);

以下是您的代码,只进行了一次修改:

for (int i = 0; i < movieTitle.length(); i++) {
    if (updatedCodedMovieTitle.charAt(i) != userInput && (movieTitle.charAt(i) == userInput || movieTitle.charAt(i) == Character.toUpperCase(userInput))) {
        updatedCodedMovieTitle = updatedCodedMovieTitle.substring(0, i)
                                        + userInput
                                        + updatedCodedMovieTitle.substring(i + 1);
        wordHasBeenUpdated = true;
    }
    if(Character.isSpaceChar(movieTitle.charAt(i)) && Character.isSpaceChar(userInput)){
        updatedCodedMovieTitle = updatedCodedMovieTitle.substring(0, i)
                        + " "
                        + updatedCodedMovieTitle.substring(i + 1);
    }
}

我在代码中所做的更改是在第一个if条件下比较大写和小写字符。我自己测试了这个程序,它对我来说很好,给了我想要的输出。

希望这也适合你:)