从控制台读取字符串输入的问题[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

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。我很困惑我做错了什么。

java string
1个回答
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)

public String next()

查找并返回此扫描程序中的下一个完整令牌。在完成令牌之前和之后是与分隔符模式匹配的输入。即使之前的hasNext()调用返回true,此方法也可能在等待输入扫描时阻塞。

public String 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
© www.soinside.com 2019 - 2024. All rights reserved.