强制换行再次正确打印

时间:2014-02-08 02:05:56

标签: java regex newline

我必须将一堆字符串导出到我在excel中打开的CSV。字符串包含我需要包含在CSV中的'\ n'和'\ t',因此我在导出数据之前执行了以下操作:

public static String unEscapString(String s)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i++)
    {
        switch (s.charAt(i))
        {
            case '\n': sb.append("\\n"); break;
            case '\t': sb.append("\\t"); break;
            default: sb.append(s.charAt(i));
        }
    }
    return sb.toString();
}

问题是我现在正在将数据重新导入Java,但我无法弄清楚如何让换行符和标签再次正确打印。我试过了:

s.replaceAll("\\n", "\n");

但它仍然忽略了换行符。帮助

编辑:我正在尝试做的例子:

说CSV中的一个字符串是“foo \ n bar”。当我使用Java导入它并且我试图将相同的字符串打印到控制台但是换行符正确行为

3 个答案:

答案 0 :(得分:2)

replaceAll的第一个参数是正则表达式。你有2个选择。你可以这样使用普通的replace

s.replace("\\n", "\n");

或者你可以转义正则表达式解析器的斜杠(它正在剥离单斜杠):

s.replaceAll("\\\\n", "\n");

s.replaceAll(Pattern.quote("\\n"), "\n");

我会选择replace,因为你没有使用正则表达式。

答案 1 :(得分:1)

应该是

sb.append("\n"); 

否则,您将使用'\'获得'n'"\\n"


但我建议您使用:

sb.append(System.getProperty("line.separator"));

这里System.getProperty("line.separator")为您提供了java中与平台无关的换行符。同样来自Java 7的是一种直接返回值的方法:System.lineSeparator()

答案 2 :(得分:0)

如果你想要字符串中的实际换行符,它应该是\ n,而不是\\ n。你拥有它的方式,它被解释为反斜杠,然后是'n'。