次のような形式のテキストファイルを読んでいます
word
definiton
word
definition
definition
word
definition
ですから、私はそれらの空の線にいつ到達するかに基づいて、私が定義にあるかどうかを試してみる必要があります。物事は、文字BufferedReader
を破棄\n
し、どういうわけかその空の行をString ""
私が思ったように登録されていません。どうすればこれを行うことができますか。
次のような形式のテキストファイルを読んでいます
word
definiton
word
definition
definition
word
definition
ですから、私はそれらの空の線にいつ到達するかに基づいて、私が定義にあるかどうかを試してみる必要があります。物事は、文字BufferedReader
を破棄\n
し、どういうわけかその空の行をString ""
私が思ったように登録されていません。どうすればこれを行うことができますか。
"".equals(myString)
これはnull
-safeです)ではありませんmyString == ""
。
myString.isEmpty()
1.6以降では、 (安全ではない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);
}
}
}
行が空のBufferedReader.readLine()
場合、は空の文字列を返します。
javadocによると:
戻り値:行末文字を含まない行の内容を含む文字列、またはストリームの終わりに達した場合は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");
}