String.replace之后斜杠引号正在消失

时间:2014-10-20 10:21:54

标签: java string

这只是字符串替换的谜语,但它已经不在了我的手中。

String dataToBeReplaced = "#putReplacement|Expression#";
String toBeReplacedWith = "<a href=\"google.com\" link=\"The link\"></a>";
String toBeReplacedIn = "{Content:"#putReplacement|Expression#"}";

// What I am doing is
toBeReplacedIn.replaceAll(dataToBeReplaced.replace('|','.'),toBeReplacedWith);
//What I am getting in 'toBeReplacedIn'
//{Content:"<a href="google.com" link="The link"></a>"} 
**//In above output, see slashes are removed, this removal actually resulting in a string which is wrong Jason.**

请建议我如何替换我的&#39;到被替换的&#39; 不会丢失目标字符串中的任何斜杠&#39; toBeReplacedIn&#39;。

2 个答案:

答案 0 :(得分:1)

String.replaceAll方法的行为与javadoc所说的应该完全相同。

  

&#34;请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll。如果需要,使用Matcher.quoteReplacement(java.lang.String)来抑制这些字符的特殊含义。&#34;

引用的文字(上图)甚至解释了如何解决问题。

答案 1 :(得分:0)

我为你试过这个,它有效。以下是您必须执行的更改:

  1. \\\用于反斜杠文字。
  2. 使用Matcher.quoteReplacement来处理\没有特殊含义。
  3. 见下面的代码:

        String dataToBeReplaced = "#putReplacement|Expression#";
        String toBeReplacedWith = "<a href=\\\"google.com\\\" link=\\\"The link\\\"></a>";
        String toBeReplacedIn = "{Content:\"#putReplacement|Expression#\"}";
        String x = toBeReplacedIn.replaceAll(dataToBeReplaced.replace('|','.'), Matcher.quoteReplacement(toBeReplacedWith));
        System.out.println(x);