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

时间:2018-09-09 10:29:19

标签: java arrays string buffer

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

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作为输入,并且在打印数组时,我的最后一个输入字符串丢失,并被换行符替换

3 个答案:

答案 0 :(得分:0)

只需在第一个int之后使用换行符:

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]
}

答案 1 :(得分:0)

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);
       }
 }

答案 2 :(得分:0)

Scanner.nextInt()仅使用输入期间给定的整数。因此,如果您提供一个整数作为输入,说5并按Enter,则Scanner.nextInt()仅消耗5,而回车/返回值将传递到nextLine上。这就是为什么您认为可以少输入1的原因。

因此,在Scanner.nextInt()之后,您应该添加一个Scanner.nextLine()只是为了使用Enter /返回键