我有通过InputStream
消耗Scanner
的代码,看起来像
String input = scanner.nextLine().toLowerCase();
if (input.isEmpty()) {
return defaultAnswer;
} else if (input.startsWith("y")) {
return true;
} else if (input.startsWith("n")) {
return false;
}
扫描器由来自
InputStream
的给定IOUtils.toInputStream("someString")
初始化。我将如何测试
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
的事实感到紧张-您应该仔细考虑期望输入的编码。