いいえ、Scanner
あなたのためにそれをしません。翻訳は自分で行う必要があります。
sc.useDelimiter("\\\\n")
(他の人が示唆しているように何かを使用すると、通常のnext()
メソッドの機能がnextLine()
損なわれ、期待どおりに機能しない可能性があることに注意してください。)
ここに私がそれを解決する方法のスケッチがあります:
変化する
Scanner input = new Scanner(new FileReader(fileName));
に
Scanner input = new Scanner(new JavaEscapeReader(new FileReader(fileName)));
^^^^^^^^^^^^^^^^^^^^^ ^
どこで次のようJavaEscapeReader
に拡張FilterReader
します:
class JavaEscapeReader extends FilterReader {
JavaEscapeReader(Reader in) {
super(in);
}
@Override
public int read() throws IOException {
int ch = super.read();
switch (ch) {
case '\\':
switch (super.read()) {
case '\\': return '\\';
case 'n': return '\n';
case 't': return '\t';
case 'f': return '\f';
// ...
default:
throw new IOException("Invalid char sequence.");
}
default:
return ch;
}
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
int i = 0, ch;
while (i < len && -1 != (ch = read()))
cbuf[i++] = (char) ch;
return i == 0 ? -1 : i;
}
}
コンテンツを含む入力ファイルが与えられた場合
Line1\nLine2
Line3\nLine3
プログラム
Scanner sc = new Scanner(new JavaEscapeReader(new FileReader("filename.txt")));
while (sc.hasNextLine())
System.out.println(sc.nextLine());
版画
Line1
Line2
Line3
Line4
もう 1 つのオプションはStringEscapeUtils.unescapeJava
、読み取った文字列を使用して後処理することです。