Java中的多行输入问题

在Java编程中,我们经常需要从用户或文件中读取多行输入。然而,Java的标准输入和文件读取方法通常是逐行读取的,这给处理多行输入带来了一些麻烦。本文将介绍一些常见的处理多行输入的方法,并提供相应的代码示例。

问题背景

假设我们需要从标准输入或文件中读取一个未知数目的整数,直到遇到一个特定的结束标记。传统的方式是使用Scanner类逐行读取输入,然后逐行处理。然而,这种方法会导致代码冗长且不够优雅。

解决方案1:使用StringBuilder

一种常见的方法是使用StringBuilder来构建输入字符串,然后将其转换为需要的格式。下面是一个示例代码:

StringBuilder input = new StringBuilder();
Scanner scanner = new Scanner(System.in);
String line;

while (scanner.hasNextLine()) {
    line = scanner.nextLine();
    if (line.equals("END")) {
        break;
    }
    input.append(line).append("\n");
}

String[] numbers = input.toString().trim().split("\n");
// 处理输入数据

上述代码中,我们使用StringBuilder来逐行构建输入字符串,并通过判断特定的结束标记来终止循环。最后,我们将StringBuilder转换为字符串,并使用split方法将其拆分为需要的格式。

解决方案2:使用BufferedReader

另一种更高效的方法是使用BufferedReader类,它可以一次读取多行输入。下面是一个示例代码:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
List<String> lines = new ArrayList<>();
String line;

while ((line = reader.readLine()) != null) {
    if (line.equals("END")) {
        break;
    }
    lines.add(line);
}

String[] numbers = lines.toArray(new String[0]);
// 处理输入数据

上述代码中,我们使用BufferedReader类来一次读取多行输入,并将每行存储在一个List中。通过判断特定的结束标记来终止循环。最后,我们将List转换为数组,并进行进一步处理。

解决方案3:使用StringBuilder和split方法

如果我们需要将多行输入转换为其他特定的数据类型(例如整数、浮点数等),我们可以使用StringBuilder和split方法的组合。下面是一个示例代码:

StringBuilder input = new StringBuilder();
Scanner scanner = new Scanner(System.in);
String line;

while (scanner.hasNextLine()) {
    line = scanner.nextLine();
    if (line.equals("END")) {
        break;
    }
    input.append(line).append("\n");
}

String[] lines = input.toString().trim().split("\n");
int[] numbers = new int[lines.length];
for (int i = 0; i < lines.length; i++) {
    numbers[i] = Integer.parseInt(lines[i]);
}
// 处理输入数据

上述代码中,我们首先使用StringBuilder来构建输入字符串,然后通过split方法将其拆分为每行。接下来,我们将每行转换为特定的数据类型(整数),并进行进一步处理。

总结

本文介绍了三种常见的处理Java中多行输入的方法。使用StringBuilder可以方便地构建输入字符串,使用BufferedReader可以高效地读取多行输入。如果需要将多行输入转换为特定的数据类型,可以结合使用StringBuilder和split方法。根据实际情况选择适合的方法可以提高代码的可读性和效率。

参考文献:

  • [Java StringBuilder](
  • [Java BufferedReader](