2014-10-20 66 views
0

这只是字符串替换谜语,但它已经离开我的手。斜杠引号在String.replace后消失

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.** 

请建议我如何能代替我的“toBeReplacedWith” 没有目标字符串“toBeReplacedIn”丢失任何斜杠。

+2

你知道你为什么添加这些斜线和他们的意思吧?顺便说一句,你应该尝试打印'toBeReplacedWith',看它是否打印斜线。 – TheLostMind 2014-10-20 10:22:55

+0

使用replace('\\ |','。') – 2014-10-20 10:24:35

+0

是的,我知道。 :)在实际的场景中,toBeReplacedWith来自数据库内部的斜杠。并且我展示了替换活动,我希望它可以保留这些斜杠而不是省略。他们是数据的一部分,而且我没有按照我在提出这个问题时所做的那样进行打字工作。上述代码中的每个值都是动态变化的,斜杠是{“”}等数据的一部分。现在我将不得不用其他字符串替换它。 – Tango 2014-10-20 10:57:24

回答

1

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

“需要注意的是反斜杠(\)和美元符号($)替换字符串中的可能导致的结果是不同的比如果它被视为文字替换字符串;见Matcher.replaceAll使用Matcher.quoteReplacement(java.lang.String)打压如果需要,这些字符的特殊含义。“

引用的文本(上面)甚至解释了如何解决您的问题。

+0

原始字符串中没有反斜杠... – assylias 2014-10-20 10:41:03

+0

是的,我知道..在实际的场景中,toBeReplacedWith来自数据库内部的斜杠。并且我展示了替换活动,我希望它可以保留这些斜杠而不是省略。他们是数据的一部分,而且我没有按照我在提出这个问题时所做的那样进行打字工作。 – Tango 2014-10-20 10:57:59

+0

@assylias - 但是'toBeReplacedWith'中有反斜杠......而那些正在消失! – 2014-10-20 10:58:45

0

我试过这个给你,它的工作原理。以下是您必须执行的更改:

  1. 对于反斜杠文字,使用\\\
  2. 使用Matcher.quoteReplacement处理\没有特别的意义。

请参见下面的代码:

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); 
+0

谢谢.. :)。在实际的场景中,所有的变量都来自数据库。 toBeReplacedWith正在与它内部的斜线。并且我展示了替换活动,我希望它可以保留这些斜杠而不是省略。他们是数据的一部分,而且我没有按照我在提出这个问题时所做的那样进行打字工作。 – Tango 2014-10-20 11:09:30