在java中用','替换'\ n'

时间:2017-03-03 07:05:24

标签: java string replace replaceall

我希望将用户的输入设为String,并将换行符\n替换为,

我试过了:

String test ="s1\ns2\ns3\ns4"; System.out.println(test.replaceAll("\n",","));

  

输出为s1,s2,s3,s4

但是,当我通过从UI获取输入来尝试相同的代码时,它无法正常工作。

当我调试它时,字符串测试(我硬编码)被视为,

S1

S2

S3

S4

但是来自UI的字符串是“s1\ns2\ns3\ns4”。

请说明出了什么问题。

4 个答案:

答案 0 :(得分:10)

\n是新行字符。如果你需要替换n之后的实际反斜杠字符,那么你需要使用它:

String test ="s1\ns2\ns3\ns4";
System.out.println(test.replaceAll("\\n",","));
  

<强>更新

您可以使用System.lineSeparator();代替\n字符。

System.out.println(test.replaceAll(System.lineSeparator(),","));

答案 1 :(得分:2)

正如anacron已经指出'\ n'是一个特殊的charachter,与用户输入“\ n”不同,因为用户输入被转换为“\\ n”。

用户输入后的Java字符串将如

String test ="s1\\ns2\\ns3\\ns4";

而不是你的测试字符串

String test ="s1\ns2\ns3\ns4";

用户将输入单个字符,键盘'\'将转换为Java字符'\\'。

答案 2 :(得分:2)

java.util.regex.Pattern documentation将行终止符指定为:

  

行终止符是一个或两个字符的序列,用于标记   输入字符序列的一行的结尾。以下是   被认为是行终止者:

     

换行符(换行符)('\ n'),   一个回车符后面跟一个换行符(“\ r \ n”),   一个独立的回车符('\ r'),   下一行字符('\ u0085'),   行分隔符('\ u2028')或   段落分隔符('\ u2029)。

来自textarea的行终止符是\ r \ n(CR / LF)。

正则表达式是[\r\n]+

答案 3 :(得分:1)

使用Regex

public class Program
{
    public static void main(String[] args) {
        String str = "s1\ns2\ns3\ns4";
        str = str.replaceAll("(\r\n|\n)", ",");
        System.out.println(str);
    }
}
  

outout:s1,s2,s3,s4