我有一个字符串,想要将其中所有的换行符都替换为字符串" --linebreak-- "
。
只需要编写以下代码即可:
string = string.replaceAll("\n", " --linebreak-- ");
我对正则表达式部分感到困惑。对于换行符,我是否需要两个斜杠?这样做够用吗?
不要使用正则表达式!你只需要进行纯文本匹配来替换"\n"
。
使用replace()
方法来用一个字符串替换另一个字符串:
string = string.replace("\n", " --linebreak-- ");
请注意,replace()
仍然替换 所有 出现的内容,replaceAll()
也一样 - 不同之处在于 replaceAll()
使用正则表达式进行搜索。replace()
方法一次即可替换所有出现的字符串(无需“循环”)。 - Bohemianreplace()
方法可以替换所有匹配到的字符串。问题在于 replaceAll()
的命名不太准确:两个方法都会替换所有出现的字符串,它们唯一的区别在于 replaceAll()
使用正则表达式来查找匹配项,而 replace()
只使用纯文本。 - Bohemianstring = string.replace("\\n", System.lineSeparator());
这段代码。但是这只适用于从外部源(例如从命令行)传入的“换行符”,因此上述代码将文字中的字面'/n'替换为实际的“新行”,你可能一直在尝试相反的操作。 - Matt使用以下正则表达式:
s.replaceAll("\\r?\\n", " --linebreak-- ")
对于UNIX和Windows操作系统,实际上只有两种换行符。
s.replaceAll(/^#.*\\r?\\n/, "")
。 - lepe自从Java 8正则表达式引擎支持\R
表示任何行分隔符(更多信息:https://dev59.com/OHRB5IYBdhLWcg3w9L3n#31060125)。
因此,如果您可以访问Java 8或更高版本,则可以使用
string = string.replaceAll("\\R", " --linebreak-- ");
不需要2个 反斜杠
。
String string = "hello \n world" ;
String str = string.replaceAll("\n", " --linebreak-- ");
System.out.println(str);
输出 = 你好 --换行-- 世界
为了完整性起见,我在这里补充一下,因为两个反斜杠的问题是真实存在的。
请参考以下SO问题中@dasblinkenlight的答案(谈论\t但它也适用于\n):
java, regular expression, need to escape backslash in regex
“有两种转义序列的解释:首先是Java编译器,然后是正则表达式引擎。当Java编译器看到两个斜杠时,它会将它们替换为一个单斜杠。当斜杠后面跟着t时,Java将其替换为制表符;当双斜杠后面跟着t时,Java不做任何处理。但是,由于两个斜杠被替换为一个单斜杠,正则表达式引擎看到\t,并将其解释为制表符。”
换行可以使用一个属性
System.getProperty("line.separator")
string.replaceAll("\n", System.getProperty("line.separator"));
\
来转义。String input = "a\nb\nc\nd";
/*
a
b
c
d
*/
input = input.replace("\n", "\\n");
System.out.println(input); // a\nb\nc\nd