我正在尝试输入一定数量的字符串,但是最后一个输入会自动换行。我需要删除输入缓冲区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作为输入,并且在打印数组时,我的最后一个输入字符串丢失,并被换行符替换
答案 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 /返回键