在java中用','替换'\ n'
Posted
技术标签:
【中文标题】在java中用\',\'替换\'\\ n\'【英文标题】:Replace '\n' by ',' in java在java中用','替换'\ n' 【发布时间】:2017-07-23 04:44:56 【问题描述】:我想将用户输入为String
并将换行符\n
替换为,
我试过了:
String test ="s1\ns2\ns3\ns4";
System.out.println(test.replaceAll("\n",","));
输出为 s1,s2,s3,s4
但是当我通过从 UI 获取输入来尝试相同的代码时,它不起作用。
当我调试它时,字符串 test(我硬编码)被视为,
s1
s2
s3
s4
但 UI 中的字符串是“s1\ns2\ns3\ns4
”。
请提出问题所在。
【问题讨论】:
试试System.out.println(test.replaceAll("\n",",").replaceAll("\r\n",","));
"从 UI 获取输入" - 显示从 UI 获取输入的代码。显然,无论读取什么都不会解释转义码并将文字 \n
留在字符串中。您可能需要自己解释转义序列
【参考方案1】:
\n
是换行符。如果你需要用n
替换那个实际的反斜杠字符,那么你需要使用这个:
String test ="s1\ns2\ns3\ns4";
System.out.println(test.replaceAll("\\n",","));
更新:
您可以使用System.lineSeparator();
代替\n
字符。
System.out.println(test.replaceAll(System.lineSeparator(),","));
【讨论】:
当我将字符串作为硬编码的字符串时,这工作正常。但是当我通过 textarea 从用户那里获取字符串时,它不起作用 当您通过 textArea 从用户处获取时,请检查该字符串的值。 不要使用 \n 而是使用 docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html 中定义的行分隔符 您可以使用System.lineSeparator();
代替\n
字符。
我认为为了让System.lineSeparator()
工作,正则表达式字符串必须像正则表达式一样格式化。所以像replaceAll("[" + System.lineSeparator() + "]+")
。这是我可以让它在我的设备上运行的唯一方法。【参考方案2】:
正如 anacron 已经指出的那样,'\n' 是一个特殊字符,与用户输入“\n”不同,因为用户输入被转换为“\\n”。
用户输入后的 Java 字符串如下所示
String test ="s1\\ns2\\ns3\\ns4";
不喜欢你的测试字符串
String test ="s1\ns2\ns3\ns4";
用户输入单个字符,键盘'\'转换为Java字符'\\'。
【讨论】:
在这种情况下如何替换 \\n? @sony System.out.println(test.replaceAll("\\n",",")); 谢谢你.. @Markus【参考方案3】:java.util.regex.Pattern documentation 指定行终止符为:
行终止符是一个或两个字符的序列,用于标记 输入字符序列的行尾。以下是 识别为行终止符:
换行符(换行符)('\n'), 一个回车符,后跟一个换行符(“\r\n”), 一个独立的回车符('\r'), 下一行字符 ('\u0085'), 行分隔符 ('\u2028'),或 段落分隔符 ('\u2029)。
来自 textarea 的行终止符是 \r\n (CR/LF)。
正则表达式是[\r\n]+
【讨论】:
【参考方案4】:使用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);
输出:s1,s2,s3,s4
【讨论】:
以上是关于在java中用','替换'\ n'的主要内容,如果未能解决你的问题,请参考以下文章