在Java中用逗号替换'\n'

9

我想要从用户那里获取一个 String 输入,并将换行符 \n 替换为 ,

我试过:

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

输出结果是 s1,s2,s3,s4

但是,当我试图通过 UI 获取输入时,它不起作用。

当我进行调试时,我硬编码的字符串 test 是这样处理的:

s1

s2

s3

s4

但是,来自用户界面的字符串是 "s1\ns2\ns3\ns4"。

请建议有什么问题。


尝试使用 System.out.println(test.replaceAll("\n",",").replaceAll("\r\n",",")); - Suresh Atta
2
从用户界面获取输入 - 显示从用户界面获取输入的代码。显然,读取输入的部分没有解释转义代码,并将字面上的\n保留在字符串中。您可能需要自己解释转义序列。 - Jim Garrison
5个回答

20

\n是代表换行符的字符。如果你需要替换实际的反斜杠字符后面跟着n,那么你需要使用这个:

\n是表示换行符的字符。如果需要替换实际的反斜杠字符后跟随n,则需要使用以下内容:

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

更新:

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

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

当我将字符串硬编码时,它可以正常工作。但是当我通过文本区域从用户获取字符串时,它就无法工作了。 - Ramya Selvarani
请在从用户通过文本区域获取字符串时检查其值。 - santosh gore
请将以下与编程有关的内容从英语翻译为中文。仅返回已翻译的文本:请勿使用 \ n,而是在 http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html 中定义的行分隔符。 - Aubin
你可以使用 System.lineSeparator(); 代替 \n 字符。 - anacron
我认为为了让 System.lineSeparator() 起作用,正则表达式字符串必须像正则表达式一样格式化。所以类似 replaceAll("[" + System.lineSeparator() + "]+") 这样的东西。这是我在我的设备上唯一能让它工作的方法。 - TNT
System.lineSeparator() 是依赖于 Java 执行的操作系统的。在客户端/服务器活动(如 Web 开发)中,您不能使用此方法预设客户端的行终止符。 - Aubin

3

java.util.regex.Pattern 文档 指定行终止符为:

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

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

您的文本区域中的行终止符为 \r\n (CR/LF)。

其正则表达式为 [\r\n]+


1
正如anacron所指出的,'\n'是一个特殊字符,与用户输入的"\n"不同,因为用户输入会转换为"\\n"。
用户输入后的Java字符串将如下所示:
String test ="s1\\ns2\\ns3\\ns4";

并且不像您的测试字符串

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

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

在这种情况下,我们该如何替换\n? - user9925311
@sony System.out.println(test.replaceAll("\n",",")); - Markus Lausberg
谢谢您,@Markus。 - user9925311

1
使用正则表达式:

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

0
如果有人从UI中获取了文本并想要删除一个反斜杠以获取下一行符号\n,那么可以使用以下代码:
        String text = "text\\ntext\\ntext\\ntext";
    System.out.println(text.replaceAll("\\\\n", "\n"));

https://istack.dev59.com/nAv8d.webp


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接