【发布时间】:2021-07-31 20:00:40
【问题描述】:
我正在为几周后将在我的教职员工中进行的竞争性锦标赛进行练习,因此我遇到了一个小问题。
比赛限制了 java.io 的使用。*(除了 IOException...)
我需要读取(从标准输入)输入,每个测试用例都用空行分隔。测试用例结束 - 找到 EOF 时。
我需要找到一种不使用 java.io 从 IO 获取数据的方法
到目前为止,我得到了这个(有效)——它返回一个包含每个测试用例的字符串,当我没有测试用例时返回 null。
public static String getInput() throws IOException {
int curr=0;
int prev=0;
StringBuilder sb = new StringBuilder();
while (true) {
curr = System.in.read();
if (curr == -1) {
return null; //end of data
}
if (curr == '\r') {
curr = System.in.read();
}
if (curr == prev && curr == '\n') {
return sb.toString(); //end of test case
} //else:
sb = sb.append((char)curr);
prev = curr;
}
}
性能(对于 IO)被忽略了,所以我不在乎我每次只读取一个字节。
问题:是否有更优雅(编码更短、更快)的方法来实现相同的目标?
【问题讨论】:
-
如果您需要从标准输入读取而不是在程序中编写该代码,更好的方法是直接从终端使用 pwsh/cmd/bash 函数,例如this跨度>