[英]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.