如何从 java 中删除输入缓冲区

how to remove input buffer from java

我正在尝试输入一定数量的字符串,但最后一次输入会自动换行作为输入。我需要删除输入缓冲区 plz help

Scanner input = new Scanner(System.in);
int n = input.nextInt();     //n is my input number
String[] arr = new String[n];
int i,j;
for(i=0;i<n;i++)
{
    arr[i] = input.nextLine();
}

如果我输入 n=5 作为输入,当我打印数组时,我的最后一个输入字符串丢失并被新行字符替换

只消耗第一个整数后的换行符:

Scanner input = new Scanner(System.in);
int n = input.nextInt();     //n is my input number
input.nextLine();

String[] arr = new String[n];
int i,j;
for(i=0;i<n;i++)
{
    arr[i] = input.nextLine();
}

演示以确保我们就代码应该做什么达成一致:

public static void main(String[] args) {
    String text =
            "5\n" +
            "line 1\n" +
            "line 2\n" +
            "line 3\n" +
            "line 4\n" +
            "line 5\n" +
            "line 6\n";

    Scanner input = new Scanner(new ByteArrayInputStream(text.getBytes()));

    int n = input.nextInt();     //n is my input number
    input.nextLine();

    String[] arr = new String[n];
    for(int i = 0; i < n; i++) {
        arr[i] = input.nextLine();
    }
    System.out.println(Arrays.asList(arr)); // [line 1, line 2, line 3, line 4, line 5]
}

nextInt() 的调用不会消耗您在控制台中输入的新行,因此您可以使用 Scanner.nextLine() 而不是 nextInt() 并转换它来消耗额外的换行符到 int

public static void main(String[] args) {
       Scanner input = new Scanner(System.in);
       //Convert the int to a String
       int n = Integer.parseInt(input.nextLine());//n is my input number
       String[] arr = new String[n];
       int i, j;
       for (i = 0; i < n; i++) {
           arr[i] = input.nextLine();
       }
       for (String s : arr) {
           System.out.println(s);
       }
 }

Scanner.nextInt() 只消耗输入时给出的整数。因此,如果您提供一个整数作为输入,例如 5 并按回车键,那么 Scanner.nextInt() 将仅消耗 5,而 enter/return 将传递给 nextLine。这就是为什么你认为,你可以少输入 1。

因此,在 Scanner.nextInt() 之后,您应该添加一个 Scanner.nextLine() 来使用 enter/return 键