转义序列无法正常工作

时间:2018-01-12 13:02:10

标签: java

我必须读取一个文件然后写一些输出文件。 在输入和输出文件中,我使用了管道分隔符: -

private static final String COLUMNDELIMITER = "\\|";

我可以完美地读取输入文件,但对于输出文件,行如下:

abc\|123\|kk

但我希望它是:

abc|123|kk

为什么相同的分隔符在读写时表现不同?

当我正在阅读一行时,我正在使用:

String[] elements = record.split(COLUMNDELIMITER); //works perfect

在写作时我正在使用:

String lineToWrite = String1 + COLUMNDELIMITER + String2 + COLUMNDELIMITER + String3 //Does not work rightly

1 个答案:

答案 0 :(得分:3)

String.split采用正则表达式,管道(|)具有特殊含义,因此需要进行转义。这是使用反斜杠(\)完成的,需要在Java字符串中进行转义,因此您需要在字符串文字中使用双反斜杠(\)。但是,在连接时,您只需要|,而不是\|

所以,改为使用:

private static final String COLUMNDELIMITER = "|";

分裂时,使用java.util.regex.Pattern#quote引用它:

String[] elements = record.split(Pattern.quote(COLUMNDELIMITER));

然后,您的连接将正常工作。