简体   繁体   English

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

[英]Replacing substring inside string not working? Java XML

All, 所有,

I am storing SQL queries as XML for my java application to improve maintainability. 我将SQL查询以XML格式存储在Java应用程序中,以提高可维护性。

Parts of my query require parameterisation, therefore I have created identifiers that I can use to replace with values when I create my query string. 查询的一部分需要参数化,因此我创建了标识符,可以在创建查询字符串时将其替换为值。

eg 例如

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

I have a function in my application that will replace these substrings. 我的应用程序中有一个函数可以替换这些子字符串。

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;    
}

For some reason it is replacing the ASCII codes for < and > but it is not replacing my markup 由于某种原因,它正在替换<和>的ASCII代码,但没有替换我的标记

Output 输出量

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

Why is it not replacing correctly? 为什么不能正确更换?

Strings in Java are immutables . Java中的Strings不可变的

An object is considered immutable if its state cannot change after it is constructed 如果对象在构造后无法改变,则认为该对象是不可变的

If you take a look at the documentation , you will see that each method that is applied to a String to modify its content will return a new String. 如果您看一下文档 ,将会看到应用于String修改其内容的每个方法都将返回一个新的String。

You should do : 你应该做 :

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

Or even better ( method chaining ): 甚至更好( 方法链接 ):

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM