读取由换行符、空格等分隔的用户输入
read input by user seperated by line breaks, spaces etc
我正在努力解决以下问题的输入部分。
问题:输入流包含一组整数Ai (0 ≤ Ai ≤ 1018)。这些数字由任意数量的空格和换行符分隔。输入流的大小不超过 256 KB。
如何读取由换行符、空格等分隔的用户输入。如何确保输入流不超过 256 KB?
以及如何确保特定输入将是用户输入的最后一个值,以便程序继续执行?
无论如何都可以输入,任何不超过 10^8 的数字,例如:第一个输入可以是 1,在同一行中,第二个输入可以是 34,由 3 个空格分隔第一个输入。然后第 2 行和第 3 行是空的,在第 4 行中,可以有一个数字 225345,这是第 3 个输入。所以一旦用户给出了所有输入,我就必须接受它们,将它们排列成一个列表或数组并对它们执行一些操作。
示例:
1427 0
876652098643267843
5276538
请帮忙。谢谢
如果每个数字之间至少有一个 space,这应该可以解决问题
Scanner scanner = new Scanner(new File("data.txt")); // or new Scanner(System.in) for reading from command line.
List<Integer> list = new ArrayList<Integer>();
while (scanner.hasNext()) {
int number = scanner.nextInt();
if (number<0||number>1018)
break;
list.add(number);
}
scanner.close();
System.out.println(list);
示例:(data.txt)
145 358
94 2
13 1205 158 489
输出:
[145, 358, 94, 2, 13, 1205, 158, 489]
使用java.util.Scanner读取long序列(因为10^18 > Integer.MAX_VALUE):
Scanner scanner = new Scanner(input);
while (scanner.hasNextLong()) {
long number = scanner.nextLong();
if (number < 1 || number > 1_000_000_000_000_000_000L)
throw new RuntimeException("input out of range: " + number);
}
要验证输入流大小,您可以重用 Guava or Commons IO 中的 CountingInputStream,或者编写您自己的代码。请注意,由于 Scanner 中的内部缓冲,您最终可能会读取超过 256 KB 的输入。
CountingInputStream input = new CountingInputStream(System.in);
Scanner scanner = new Scanner(input);
while (scanner.hasNextLong() && input.getCount() < 256 * 1024) { ... }
确保特定输入将是最后一个值需要您选择一个分隔符。我会使用可接受输入中的一个数字,比如 -1:
CountingInputStream input = new CountingInputStream(System.in);
Scanner scanner = new Scanner(input);
while (scanner.hasNextLong() && input.getCount() < 256 * 1024) {
long number = scanner.nextLong();
if (number == -1)
break;
if (number < 1 || number > 1_000_000_000_000_000_000L)
throw new RuntimeException("input out of range: " + number);
}
希望对您有所帮助。
我正在努力解决以下问题的输入部分。
问题:输入流包含一组整数Ai (0 ≤ Ai ≤ 1018)。这些数字由任意数量的空格和换行符分隔。输入流的大小不超过 256 KB。
如何读取由换行符、空格等分隔的用户输入。如何确保输入流不超过 256 KB? 以及如何确保特定输入将是用户输入的最后一个值,以便程序继续执行?
无论如何都可以输入,任何不超过 10^8 的数字,例如:第一个输入可以是 1,在同一行中,第二个输入可以是 34,由 3 个空格分隔第一个输入。然后第 2 行和第 3 行是空的,在第 4 行中,可以有一个数字 225345,这是第 3 个输入。所以一旦用户给出了所有输入,我就必须接受它们,将它们排列成一个列表或数组并对它们执行一些操作。
示例:
1427 0
876652098643267843
5276538
请帮忙。谢谢
如果每个数字之间至少有一个 space,这应该可以解决问题
Scanner scanner = new Scanner(new File("data.txt")); // or new Scanner(System.in) for reading from command line.
List<Integer> list = new ArrayList<Integer>();
while (scanner.hasNext()) {
int number = scanner.nextInt();
if (number<0||number>1018)
break;
list.add(number);
}
scanner.close();
System.out.println(list);
示例:(data.txt)
145 358
94 2
13 1205 158 489
输出:
[145, 358, 94, 2, 13, 1205, 158, 489]
使用java.util.Scanner读取long序列(因为10^18 > Integer.MAX_VALUE):
Scanner scanner = new Scanner(input);
while (scanner.hasNextLong()) {
long number = scanner.nextLong();
if (number < 1 || number > 1_000_000_000_000_000_000L)
throw new RuntimeException("input out of range: " + number);
}
要验证输入流大小,您可以重用 Guava or Commons IO 中的 CountingInputStream,或者编写您自己的代码。请注意,由于 Scanner 中的内部缓冲,您最终可能会读取超过 256 KB 的输入。
CountingInputStream input = new CountingInputStream(System.in);
Scanner scanner = new Scanner(input);
while (scanner.hasNextLong() && input.getCount() < 256 * 1024) { ... }
确保特定输入将是最后一个值需要您选择一个分隔符。我会使用可接受输入中的一个数字,比如 -1:
CountingInputStream input = new CountingInputStream(System.in);
Scanner scanner = new Scanner(input);
while (scanner.hasNextLong() && input.getCount() < 256 * 1024) {
long number = scanner.nextLong();
if (number == -1)
break;
if (number < 1 || number > 1_000_000_000_000_000_000L)
throw new RuntimeException("input out of range: " + number);
}
希望对您有所帮助。