Java字符串中不能删除换行符(\n),这是否可能?

5

基本上,我所要做的就是在Java的字符串中删除换行符。我已经查看了数十篇类似问题的帖子,它们都说同样的事情,但是似乎都不适用于我。这是我所有的代码,共3行:

    String text = "\\n          texttexttext     \\n";
    text = text.replaceAll("\\n", "");
    System.out.println(text);

这个字符串和我实际尝试使用的很相似,但是即使使用这个字符串,我仍然无法找到换行符并替换它。replaceAll函数无法识别它,我不知道为什么。

我也尝试了许多其他方法,比如:

    text = text.replaceAll("\\n", "").replaceAll("\\r", "");

或者

    text = text.replaceAll("\\r\\n|\\r|\\n", " ");

但是没有任何东西能够找到这个字符。即使使用Regex Pattern和Matcher对象,我也不能找到它。我做的唯一稍微不寻常的事情就是在一个Junit测试bean中进行操作,但我不相信那会有任何影响。


你正在打印 txt 而不是文本 - 这是有意的吗? - Joey
3
字符串 text = "\\n texttexttext \\n";" 这里的 "\\n" 不是换行符,它字面上就表示 "\n"。 - Jon Lin
是的,抱歉。名字不是问题。我只是为了清晰起见在帖子中更改了一些变量名,并且犯了一个错误,我会修复它。但我不认为你的建议能解决我的问题。我已经尝试使用“\n”,“\n”甚至“\\n”,但什么都找不到它。 - kyle
6个回答

9
你的原始文本中没有换行符。你转义了反斜杠,而不是n,所以你在text字符串中实际上有反斜杠\n字符。
你确实需要在正则表达式中转义反斜杠字符,但不需要在字面意义上的字符串文本中这样做。
如果你将text初始化为"\n texttexttext \n",那么它就会按预期查找和替换这些换行符。

是的,那似乎可以工作,但我不明白为什么我不能找到字符串“\n”。实际上,我正在尝试解析一个大型文档,所以我认为我应该能够在其中找到“\n”,然后将它们更改为“\n”。但对于我来说,在字符串中查找“\n”就是问题所在。 - kyle
1
要在字符串中查找\\n,你需要一个正则表达式,在n之前包含两个反斜杠字符,这两个字符对于Java本身也需要进行转义,即"\\\\n" - rgettman

4
String newLine = System.getProperty("line.separator")
System.out.println(newLine.contains("\n")); // this is a new line
System.out.println(newLine.contains("\\n"));

输出:

true
false

3

如Jon Lin所评论的那样,你的示例文本实际上并没有讨论换行符- \\n是字符串\n

另一个谬论是replaceAll将第一个输入作为正则表达式。因此,\\n实际上会被替换为\n,因为\是转义字符,然后解释为换行符-双重转义,因此在您的输入文本中不匹配\\

如果您尝试

text = text.replaceAll("\\\\n", "");

至少你会得到预期的结果,因为它既是Java字符串又是正则表达式,两者都将 \ 解释为转义字符。

\n 是一个已定义的正则表达式字符。问题在于字符串中没有换行符。 - dognose
1
哇,这个可行。我不知道为什么之前没有尝试过。我在这上面浪费了将近两个小时,谢谢。 - kyle

0
除了 @rgettman 的回答之外,为了使其对社区有用,以下是一款令人惊叹的 Java 程序(更多信息,请从 这里 阅读整篇文章),可以替换换行符。
public class StringReplaceTask{


    public static void main(String args[]) {

        // Removing new line characters form Java String
        String sample="We are going to replace newline character \\n "
                + "New line should start now if \\n \n is working";

        System.out.println("Original String: " + sample);

        //replacing \n or newline character so that all text come in one line
        System.out.println("Escaped String: " + sample.replaceAll("\n", ""));


        // removing line breaks from String read from text file in Java
        String text = readFileAsString("words.txt");
        text = text.replace(System.getProperty("line.separator"), "");

    }  

0
自Java 8以来,您可以按照以下方式进行操作。
text.replaceAll("\\R+", " ")

-3
如果head = 'Hello',但是当你print(head)时,输出的结果是'Hello\n'。你可以使用rstrip()remove()来去除\n
你可以使用我的代码。
**head=a[0:(len(head)-1)]**

去除字符串中隐藏的\n

(在Python 3上测试)祝你好运!


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