Java中使用replaceAll替换换行符

4

当我尝试检测和替换换行符号\n时,它给我带来了一些麻烦:

这个可以正常工作:

String x = "Bob was a bob \\n";
String y = x.replaceAll("was", "bob");
System.out.println(y);

但是这段代码没有得到期望的结果。

String x = "Bob was a bob \\n";
String y = x.replaceAll("\n", "bob");
System.out.println(y);
6个回答

8

"Bob was a bob \\n" 变成了字面上的 Bob was a bob \n

输入字符串中没有要替换的换行符。你是想替换换行符还是转义序列\\n


我正在尝试将换行符替换为另一个字符串,例如 "A B \n C" 将变成 "A B Y C"。 - Kay
3
正如我之前所说的,你的输入字符串中没有换行符。 - Dark Falcon
4
您输入的字符串中没有换行符,而是一个反斜杠后跟着一个字母n。与此同时,您的正则表达式中没有针对换行符的转义序列,而是实际的换行符。 - Karl Knechtel

3

这个按照预期工作。

String str = "A B \n C";
String newStr = str.replaceAll("\\n","Y");
System.out.println(newStr);

打印:

A B Y C

1
String x = "Bob was a bob \\n";
String y = x.replaceAll("was", "bob");
System.out.println(y);

一个问题在这里:"\n"不是换行符号。应该是:
String x = "Bob was a bob \n";// \n is newline symbol, on window newline is \r\n

0

你试过这个吗?:

x.replaceAll("\\n", "bob");

在使用替换函数之前,请转义换行符。


在正则表达式字符串中,您可以使用\n\\n。在Java编译器完成后,正则表达式编译器将在第一种情况下看到实际的换行符,或者在第二种情况下看到转义序列反斜杠-'n'。无论哪种方式,它都将匹配换行符。正如其他人指出的那样,目标字符串中的反斜杠-反斜杠-'n'是错误的。 - Alan Moore

0

您的输入字符串不包含换行符。相反,它包含“\n”。请参见下面已更正的输入字符串。

String x = "Bob was a bob \n";
String y = x.replaceAll("\n", "bob");
System.out.println(y);

-3

更新:

我已经修改了它,使其适用于多个 \n 的出现。请注意,这可能不是非常高效的。

public static String replaceBob(String str,int index){
    char arr[] = str.toCharArray();
    for(int i=index; i<arr.length; i++){
        if( arr[i]=='\\' && i<arr.length && arr[i+1]=='n' ){
            String temp = str.substring(0, i)+"bob";
            String temp2 = str.substring(i+2,str.length());
            str = temp + temp2;
            str = replaceBob(str,i+2);
            break;
        }
    }
    return str;
}

我试过这个,它有效了

String x = "Bob was a bob \\n 123 \\n aaa \\n";
System.out.println("result:"+replaceBob(x, 0));

第一次调用函数时,请使用索引0。


3
请选择一个原因:1.) 它比必要的更加复杂;2.) 它非常低效;3.) 它过度使用递归;4.) 在 if 条件中存在一个偏移量为一的错误;5.) 在 if 代码块内部存在一个偏移量为二的错误;6.) 它使用字符串串联而不是 StringBuilder;或7.) 它无法解决 OP 的问题,因为他/她试图替换一个不包含任何换行符的字符串中的换行符。 - Alan Moore

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