从控制台读取字符串输入时出现问题

时间:2018-10-27 22:45:59

标签: java string

import java.util.Scanner;

public class uppertolower {

    public static void main(String[] args) {

        Scanner scr = new Scanner(System.in);

        System.out.print("Input a character: ");
        char ch = scr.next().charAt(0);
        System.out.println("ch is " + ch);

        System.out.print("\nInput a string: ");
        String str = scr.nextLine();
        System.out.println("str is " + str);

        scr.close();


    }
}

如果我为字符输入“ a”,我将自动获得以下输出:

https://i.imgur.com/WDDpiJl.png

控制台不要求我输入字符串,而是自动输出最后一个println。我对自己做错了感到困惑。

1 个答案:

答案 0 :(得分:0)

在两种情况下均使用nextLine()

System.out.print("Input a character: ");
char ch = scr.nextLine().charAt(0);  // Use nextLine() instead of next()
System.out.println("ch is " + ch);

System.out.print("\nInput a string: ");
String str = scr.nextLine();  // No change
System.out.println("str is " + str);

next()查找并返回下一个完整令牌,而nextLine()返回完整行并将扫描仪移至下一行。

请参阅-Scanner (Java Platform SE 7)

公共字符串next()

  

查找并返回此扫描仪的下一个完整令牌。完整的标记在其前面,然后是与定界符模式匹配的输入。即使先前调用hasNext()返回true,此方法也可能在等待输入扫描时阻塞。

公共字符串nextLine()

  

将此扫描程序前进到当前行之后,并返回跳过的输入。此方法返回当前行的其余部分,但不包括最后的任何行分隔符。该位置设置为下一行的开始。   由于此方法继续在输入中搜索以寻找行分隔符,因此,如果不存在行分隔符,它可以缓冲所有要搜索的输入以跳过该行。

使用next()的简单示例:

public class Test02 {
    public static void main(String[] args) {

        String s = "This is just a sample sentence";

        Scanner scanner = new Scanner(s);

        // find the next token and print it
        System.out.println("Token 1 - " + scanner.next());
        System.out.println("Token 2 - " + scanner.next());
        // ... and so on

        scanner.close();
    }
}

输出:

Token 1 - This
Token 2 - is