我有一个SQL查询在文本中传递给我,这是它的一部分:
WHERE (t.STIME> CAST(SYSTIMESTAMP as TIMESTAMP)+ NUMTODSINTERVAL(-86400000 * 0.001,'SECOND')) )t ORDER BY
m_2 ASC,m_1 ASC,t.STIME ASC
我想做的是简单地以我将拥有的方式修改它:
WHERE (t.STIME> CAST(SYSTIMESTAMP as TIMESTAMP)+ NUMTODSINTERVAL(-86400000 * 0.001,'SECOND')) 订购
m_2 ASC,m_1 ASC,t.STIME ASC)
所以,我需要以某种方式从String中删除:“)t”,但是如何做到这一点?我总是收到“无与伦比的”括号,我真的不知道为什么x /
这是我为替换此字符串而编写的方法:
public static String replaceLast(String string, String toReplace, String replaceWith) {
int last = string.lastIndexOf(toReplace);
if (last < 0) return string;
String ending = string.substring(last).replaceFirst(toReplace, replaceWith);
return string.substring(0, last) + tail;
}
然后我试图以这种方式使用它:
if(sqlToTrim.lastIndexOf("\\) t") > 0){
replaceLast(sqlToTrim, "\\) t ", " ");
addLastParanthesis(sqlToTrim);
}
但它没有被替换,基本上没有任何变化 - replaceLast从未使用过。我假设我搞乱了正则表达式,我搜索了堆栈溢出,但似乎\是我应该放在之前的正确组合)。在此先感谢您的帮助。谁能告诉我我做错了什么?
如果你需要知道,为什么我这样做,为什么这样 - 传统代码......
答案 0 :(得分:5)
字符串是不可变的。 replaceLast(sqlToTrim, "\\) t ", " ");
返回一个新字符串。做:
sqlToTrim = replaceLast(sqlToTrim, "\\) t ", " ");
继续从那里开始。如果addLastParenthesis
修改了字符串,它应该返回它,即
sqlToTrim = replaceLast(sqlToTrim, "\\) t ", " ");
sqlToTrim = addLastparenthesis(sqlToTrim);