[英]Java - How to Input Multiple Lines of Text In One Input
我目前正在 Java 中编写一个程序,其中我需要从用户那里获取输入,这是一段文本。 但是,我需要用户能够在一个 go 中输入多段文本。 这可以通过在程序提示输入时简单地粘贴整个文本来实现。 我正在使用扫描仪进行输入,当我将多个段落粘贴到输入中时,不会抛出任何错误,但是每当我打印出存储文本的变量时,只有第一部分(在第一个换行符之前)是 output。 如何在不提示用户为每个文本块单独输入的情况下存储具有多个换行符的整段文本?
我已经有一些代码,但它不能处理多行:
import java.util.*;
public class ReWrite {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Please paste the essay to be re-written >> ");
String originalEssay = scanner.nextLine();
System.out.println(originalEssay);
System.out.println("I hope that was your essay...");
}
}
您需要有一种方法让用户指示他何时完成输入数据。
在此之前,取最新的输入行并保存。 从空字符串和 append 开始,每行输入的文本,直到用户用一些预先确定的字符集指示他完成了。
通常,您不应尝试从命令行输入整段文本。 但是,如果您想阅读如此大的文本,则可以使用BufferedReader
并简单地阅读到 stream 的末尾。 遇到 EOF 时到达 stream 的末尾。 在许多系统上,可以通过点击 Control-D 来生成 EOF(但您可能希望向用户表明这一点)。
使用这种通用方法的一大优点是,您还可以使用各种操作系统提供的实用程序将 pipe 文件放入您的应用程序中。
一个缺点是,将它与Scanner
混合不是一个好主意; 显然扫描仪在 EOF 之后是无用的,在文本之前使用它可能意味着扫描仪检索到部分文本。 关闭扫描仪也将关闭它所连接的输入 stream。 扫描器通常必须向前看才能看到令牌在哪里结束,并且它可能必须读入文本才能这样做。
StringBuilder sb = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
CharBuffer buffer = CharBuffer.allocate(1024);
while (reader.read(buffer) != -1) {
buffer.flip();
sb.append(buffer);
buffer.clear();
}
}
System.out.printf("Read %d characters", sb.length());
我没有提供字符编码。 对于这样的应用程序,平台字符编码应该做得很好。
import java.util.*;
public class ReWrite {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("Please paste the essay to be re-written >> ");
String originalEssay = "";
System.out.println();
while(scanner.hasNextLine()){
originalEssay += scanner.nextLine();
originalEssay += "\n";
}
System.out.println(originalEssay);
System.out.println("I hope that was your essay...");
}
}
你需要上面的程序。 您需要确保您正在检查输入中是否有任何其他“行”。 您可以使用 hasWhileNext() 来执行此操作。 希望这可以帮助!
您需要某种方式来了解用户是否完成了他们的输入。 我用 THE-END 作为标记做了一个小例子(是的,不是原始的吗?)
import java.util.Scanner;
public class DocReader {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StringBuilder strBuilder = new StringBuilder();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (!line.equals("THE-END")) {
strBuilder.append(line + System.lineSeparator());
} else {
break;
}
}
System.out.println(strBuilder.toString());
scanner.close();
}
}
这在末尾添加了一个额外的行分隔符,如果需要,很容易解决。 使用多个中断作为结束标记可能会更好(一些基于文本的协议会这样做),例如用户按回车键 3 次。 这意味着它们不能有两个空行,因此非常依赖于用例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.