【问题标题】:how to remove input buffer from java [duplicate]如何从java中删除输入缓冲区[重复]
【发布时间】:2018-09-09 10:29:18
【问题描述】:

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

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

【问题讨论】:

  • 只是想问一下,有没有其他方法可以输入字符串,因为我只想输入没有空格的字符串。如果可能,我不想使用 nextLine() 函数

标签: java arrays string buffer


【解决方案1】:

只消耗第一个 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]
}

【讨论】:

  • 我会对此感到惊讶。你从 0 迭代到 n-1,应该正好产生 n 行
  • 对不起,我的意思是当我打印数组时,我的最后一个输入字符串丢失并被换行符替换
  • 我将向您展示上述代码的演示,您将告诉我您的预期输出与实际输出是什么
  • 是的,我知道了错误。对不起,我误解了这个概念
  • 好吧,别担心 :)
【解决方案2】:

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

【讨论】:

  • 这解决了我的问题,我是java新手,所以你能更详细地解释一下这一行int n = Integer.parseInt(input.nextLine());
  • 正如其他人在回答中所说,nextInt() 不使用第一个换行符,这就是您的第一行为空的原因。查看我的答案中的演示 sn-p 并尝试删除第一个 nextLine 看看会发生什么。
  • input.nextLine() 正在返回一个 String,您需要将其转换为 int 以在 for 循环中使用。将String 转换为int 是通过Integer.parseInt(String) 完成的。当您在控制台中输入数字并按回车键时,默认情况下nextInt() 不会使用额外的换行符,因此我使用了nextLine(),默认情况下会在数字后跳过一个新行。
【解决方案3】:

Scanner.nextInt() 仅使用输入期间给出的整数。所以,如果你提供一个整数作为输入,比如5 并按回车,那么Scanner.nextInt() 将只消耗5,并且回车/回车被传递到nextLine。这就是为什么你认为你可以少输入 1。

所以,在Scanner.nextInt() 之后,你应该添加一个Scanner.nextLine() 只是为了使用回车键

【讨论】:

  • 或者你可以使用 input.nextInt() 然后在需要的地方使用 input.next()
猜你喜欢
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
相关资源
最近更新 更多