我希望将用户的输入设为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
”。
请说明出了什么问题。
答案 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