I'm reading in a text file formated like
word
definiton
word
definition
definition
word
definition
因此,我需要根据当我到达那些空行时是否在定义中进行跟踪。问题是,BufferedReader
会丢弃 \n
字符,而将那个空行与 String ""
进行比较并没有像我想的那样被注册。我该如何处理这个问题。
I'm reading in a text file formated like
word
definiton
word
definition
definition
word
definition
因此,我需要根据当我到达那些空行时是否在定义中进行跟踪。问题是,BufferedReader
会丢弃 \n
字符,而将那个空行与 String ""
进行比较并没有像我想的那样被注册。我该如何处理这个问题。
"".equals(myString)
(这是null
-安全的),而不是 myString == ""
。
myString.isEmpty()
(不是null
-安全的)myString.trim()
来在上述检查之前消除额外的空格以下是一些代码:
public void readFile(BufferedReader br) {
boolean inDefinition = false;
while(br.ready()) {
String next = br.readLine().trim();
if(next.isEmpty()) {
inDefinition = false;
continue;
}
if(!inDefinition) {
handleWord(next);
inDefinition = true;
} else {
handleDefinition(next);
}
}
}
<= ' '
的字符。它不会移除所有的空格,但会移除控制字符。 - Peter LawreyBufferedReader.readLine()
方法返回一个空字符串,如果读取到的行为空。 根据javadoc文档所述:
如果你没有看到空字符串,则要么这一行不是空行,要么你没有正确测试是否为空字符串。请注意保留原有的HTML标签。返回结果:包含该行的内容(不包括任何行终止字符)的字符串,如果已经到达流的末尾,则返回null。
line = reader.readLine();
if ("".equals(line)) {
//this is and empty line...
}
我不知道你是如何尝试检查字符串是否为空的,所以我无法解释为什么它对你不起作用。你可能使用 ==
进行比较吗?在这种情况下,它不起作用是因为 ==
比较引用而不是对象内容。
String line = null;
while ((line = br.readLine()) != null) {
if (line.trim().equals("")) {
// empty line
} else {
System.out.println(line);
}
}
只包含空格字符的行也将被跳过。
try (BufferedReader originReader = getReader("now")) {
if (StringUtils.isEmpty(originReader.readLine())) {
System.out.printline("Buffer is empty");
}