替换字符串内的子串不起作用? Java XML

时间:2013-10-20 14:52:58

标签: java regex replace

所有

我将SQL查询存储为我的java应用程序的XML,以提高可维护性。

我的部分查询需要参数化,因此我在创建查询字符串时创建了可用于替换值的标识符。

e.g。

WHERE CB.callback_date >= TO_DATE('$LASTDATE$','DD/MM/YYYY')
  AND CB.callback_date < TO_DATE('$FROMDATE$','DD/MM/YYYY')

我的应用程序中有一个函数将替换这些子字符串。

public static String xmlQueryPrep(String prep)
{

    //add dates to query
    prep.replace("'$LASTDATE$'", "'20/10/2013'");
    prep.replace("'$FROMDATE$'", "'18/10/2013'");
    prep.replace("&lt;", "<").replace("&gt;", ">");
    return prep;    
}

由于某种原因,它正在替换&lt;和&gt;但它并没有取代我的标记

输出

WHERE CB.callback_date >= TO_DATE('$LASTDATE$','DD/MM/YYYY')
  AND CB.callback_date < TO_DATE('$FROMDATE$','DD/MM/YYYY')

为什么不能正确更换?

1 个答案:

答案 0 :(得分:7)

Java中的

Stringsimmutables

  

如果一个对象的状态在其后不能改变,则该对象被认为是不可变的   构建

如果您查看documentation,您会看到应用于String以修改其内容的每个方法都将返回一个新的String。

你应该这样做:

prep = prep.replace("'$LASTDATE$'", "'20/10/2013'");
prep = prep.replace("'$FROMDATE$'", "'18/10/2013'");
prep = prep.replace("&lt;", "<").replace("&gt;", ">");
return prep;  

甚至更好(method chaining):

return prep.replace("'$LASTDATE$'", "'20/10/2013'")
           .replace("'$FROMDATE$'", "'18/10/2013'")
           .replace("&lt;", "<")
           .replace("&gt;", ">");