我有一个现有的代码,我必须扫描用户在控制台中输入的下一个句子。这句话不能超过 99 个字符。我当前的代码采用
.nextLine()
方法,并将输入的所有内容保存在字符串中。然后它检查该字符串的长度,如果它超过 99,我使用 .substring(0,99)
方法截掉多余的部分。这工作得很好,但我觉得它真的很难看。
问题是,假设用户决定将 Lev Tolstojs 战争与和平的两卷复制粘贴到控制台中,我的程序会首先尝试将其无缘无故地保存为字符串,因为我只需要前 99 个字符。问题出现了:有没有办法告诉扫描仪在达到一定数量的字符后停止扫描?这比扫描所有内容并且比仅使用我需要的部分更便宜。
您可以使用 Reader#read 方法来完成。这是使用
BufferedReader
的示例。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
// Create a buffered reader for System.in
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
char[] buffer = new char[99]; // Define the buffer of appropriate size
System.out.print("Enter text: ");
int n = br.read(buffer); // Read user input in the buffer,
// n denotes number of characters read
String input = new String(buffer, 0, n); // Create string upto n character
System.out.println(input);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
如果输入小于缓冲区大小,缓冲区还将包含换行符。你可能想把它剥掉。