Java - Scanner:读取由Pipe分隔的记录行 作为分隔符

gti*_*333 3 java java.util.scanner

我想读取一个文本文件,其中字段数据由分隔符|分隔 (管道符号).

但有些意外发生了:

这是我的代码:

doScannerTest ("Y~2011~GT~Nepal~Ganesh~Tiwari~N", "~");
doScannerTest("Y|2011|GT|Nepal|Ganesh|Tiwari|N", "|");

private static void doScannerTest(String recordLine, String delim) {
    java.util.Scanner lineScanner = new java.util.Scanner(recordLine);
    lineScanner.useDelimiter(delim);
    while (lineScanner.hasNext()) {
        System.out.println(lineScanner.next());
    }
}
Run Code Online (Sandbox Code Playgroud)

delim~工作正常,但是 打印recordLine中的所有字符.

为什么记录有delim | 不管用 ?我无法更改框架代码(使用Scanner)并使用String Split.

Kev*_*n D 11

管道字符是一个保留的正则表达式字符,您需要将其转义.例如,你需要使用

\\|
Run Code Online (Sandbox Code Playgroud)

把它放在你的代码中给出了以下输出

  • ÿ
  • 2011
  • GT
  • 尼泊尔
  • Ganesh神
  • 蒂瓦里
  • ñ