当我尝试检测和替换换行符号\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);
"Bob was a bob \\n"
变成了字面上的 Bob was a bob \n
输入字符串中没有要替换的换行符。你是想替换换行符还是转义序列\\n
?
这个按照预期工作。
String str = "A B \n C";
String newStr = str.replaceAll("\\n","Y");
System.out.println(newStr);
打印:
A B Y C
String x = "Bob was a bob \\n";
String y = x.replaceAll("was", "bob");
System.out.println(y);
String x = "Bob was a bob \n";// \n is newline symbol, on window newline is \r\n
你试过这个吗?:
x.replaceAll("\\n", "bob");
在使用替换函数之前,请转义换行符。
\n
或\\n
。在Java编译器完成后,正则表达式编译器将在第一种情况下看到实际的换行符,或者在第二种情况下看到转义序列反斜杠-'n'。无论哪种方式,它都将匹配换行符。正如其他人指出的那样,目标字符串中的反斜杠-反斜杠-'n'是错误的。 - Alan Moore您的输入字符串不包含换行符。相反,它包含“\n”。请参见下面已更正的输入字符串。
String x = "Bob was a bob \n";
String y = x.replaceAll("\n", "bob");
System.out.println(y);
更新:
我已经修改了它,使其适用于多个 \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。
if
条件中存在一个偏移量为一的错误;5.) 在 if
代码块内部存在一个偏移量为二的错误;6.) 它使用字符串串联而不是 StringBuilder;或7.) 它无法解决 OP 的问题,因为他/她试图替换一个不包含任何换行符的字符串中的换行符。 - Alan Moore