【发布时间】:2019-04-02 06:42:11
【问题描述】:
尝试使用 replaceAll 方法替换 java 中的多行字符串,但它不起作用。下面的逻辑有什么问题吗?
String content=" \"get\" : {\n" +
" \"name\" : [ \"Test\" ],\n" +
" \"description\" : \"Test description to replace\",\n" +
" \"details\" : \"Test details\"";
String searchString=" \"name\" : [ \"Test\" ],\n" +
" \"description\" : \"Test description to replace\",";
String replaceString=" \"name\" : [ \"Actual\" ],\n" +
" \"description\" : \"Replaced description\",";
尝试了以下选项,但都没有奏效-
Pattern.compile(searchString, Pattern.MULTILINE).matcher(content).replaceAll(replaceString);
Pattern.compile(searchString, Pattern.DOTALL).matcher(content).replaceAll(replaceString);
content = content.replaceAll(searchString, replaceString);
【问题讨论】:
-
我目前无法对此进行测试,但您肯定需要转义搜索字符串中的
[括号(将它们更改为\\[)。也许这已经解决了它。 -
您可以用
\Q开头引用整个搜索字符串或调用Pattern.quote() -
使用这样的东西:String str = content.replaceAll("\\n","");
-
由于您没有使用正则表达式,因此请使用简单的
content = content.replace(searchString, replaceString);或更复杂的content = Pattern .compile(searchString, Pattern.LITERAL).matcher(content).replaceAll(replaceString);。如果您想保留compile的结果并多次使用,后者是有意义的。然后,您会从准备工作中受益,例如幕后使用的 Boyer-Moore 算法。