我的代码通过 Scanner
消耗 InputStream
,看起来像
String input = scanner.nextLine().toLowerCase();
if (input.isEmpty()) {
return defaultAnswer;
} else if (input.startsWith("y")) {
return true;
} else if (input.startsWith("n")) {
return false;
}
其中扫描器由来自 IOUtils.toInputStream("someString")
的给定 InputStream
初始化。
如何测试 if (input.isEmpty())
路径?
编辑:
我交换了代码中的两行,空字符串 (""
) 导致 NoSuchElementException
,换行符或回车符导致返回空字符串.
最佳答案
使用 IOUtils.toInputStream("")
或new ByteArrayInputStream(new byte[0])
可能有效。
后者肯定会提供一个空流,但它可能会使您的代码失败,因为没有空行可供读取 - 没有行终止符。例如:
import java.io.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
InputStream stream = new ByteArrayInputStream(new byte[0]);
Scanner scanner = new Scanner(stream, "UTF-8");
String line = scanner.nextLine();
System.out.println(line);
}
}
失败的原因是:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at Test.main(Test.java:10)
您可以使用Scanner.hasNextLine()
检查是否调用nextLine()
是否合适。您可能希望在代码中执行此操作。这实际上取决于您是否尝试建模“输入结束时没有一行”或“用户输入了空行”。这些情况截然不同,您应该考虑这两种情况。
如果您想提供包含换行符的流(即“用户输入空行”),那么您可能需要使用 IOUtils.toInputStream("\n")
反而。我很紧张,因为它没有指定 Charset
不过 - 您应该仔细考虑您期望输入采用的编码。
关于java - 如何使用 IOUtils.toInputStream 为 InputStream 提供一个空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24817450/