Java正则表达式-使用字符串';s replaceAll方法来替换换行符
我有一个字符串,只想用字符串Java正则表达式-使用字符串';s replaceAll方法来替换换行符,java,regex,newline,Java,Regex,Newline,我有一个字符串,只想用字符串“--linebreak--”替换其中的所有换行符 只要写下以下内容就够了吗 string = string.replaceAll("\n", " --linebreak-- "); 我对其中的正则表达式部分感到困惑。这条新线需要两条斜线吗?这够好吗?看起来不错。你不需要两个反斜杠 不需要2个反斜杠 String string = "hello \n world" ; String str = string.replaceAll("\n", " --linebr
“--linebreak--”
替换其中的所有换行符
只要写下以下内容就够了吗
string = string.replaceAll("\n", " --linebreak-- ");
我对其中的正则表达式部分感到困惑。这条新线需要两条斜线吗?这够好吗?看起来不错。你不需要两个反斜杠
不需要2个
反斜杠
String string = "hello \n world" ;
String str = string.replaceAll("\n", " --linebreak-- ");
System.out.println(str);
输出=hello--linebreak--world
使用下面的正则表达式:
s.replaceAll("\\r?\\n", " --linebreak-- ")
UNIX和Windows操作系统实际上只有两个新行。不要使用正则表达式。只需纯文本匹配即可替换
“\n”
用于将文字字符串替换为另一个文字字符串:
string = string.replace("\n", " --linebreak-- ");
请注意,
replace()
仍然会替换所有出现的内容,正如replaceAll()
一样-区别在于使用正则表达式进行搜索。对于新行,有一个属性
System.getProperty("line.separator")
以你为例,
string.replaceAll("\n", System.getProperty("line.separator"));
只是为了完整性而添加这个,因为2反斜杠是真实的 请参阅以下SO问题中的@dasblinkenlight答案(谈论\t,但也适用于\n):
对转义序列有两种解释:首先由Java编译器解释,然后由regexp引擎解释。当Java编译器看到两个斜杠时,它会用一个斜杠替换它们。当斜杠后面有t时,Java用一个制表符替换它;当双斜杠后面有一个t时,Java就不处理它了。但是,由于两个斜杠已被一个斜杠替换,因此regexp引擎会看到\t,并将其解释为一个选项卡。“,因为Java 8 regex引擎支持表示任何行分隔符的
\R
(更多信息:)
因此,如果您能够访问Java8,您可以使用
string = string.replaceAll("\\R", " --linebreak-- ");
这两种方法都有效。请参阅的答案以获得更好的解释。那么,你是说在循环中使用replace()而不是一次使用replaceAll()?我不明白为什么这是一个更好的主意?@Tim调用
replace()
once替换所有发生的事件(不需要“循环”)噢,哇。谢谢你,出于某种原因,我在阅读规范时忽略了这一点。@Bohemian不确定这是否完全正确——在一个包含多个空格(“”)的字符串中,执行replaceAll(“\\s+”,“”)会将所有多空格部分减少为一个,但简单地替换(…)只会执行一次。@Amalgovinusreplace()
将它们全部替换。问题是replaceAll()
的名称不正确:这两种方法都替换所有出现的情况-它们之间唯一的区别是replaceAll())
使用正则表达式查找匹配项,而replace使用纯文本。另一件事是,replaceAll的第一个参数可以是一个平面字符串或正则表达式。在字符串中,“\n”“被解释为文字,但如果包含其他仅限正则表达式的符号,如字符集的括号,则需要额外的斜杠,以便向正则表达式编译器获取正确的字符串,如您所说……例如,“[\\r\\n]+”s.replaceAll(“\r?\n”,“--linebreak-->”);为MECA工作也可以是:s.replaceAll(/^#.*\\r?\\n/,“”)
。使用正则表达式分隔符删除注释的示例。