替换java中的某些字符

Mat*_*zcz 1 java regex

我有一个SQL查询在文本中传递给我,这是它的一部分:

在哪里(t.STIME> CAST(SYSTIMESTAMP AS TIMESTAMP)+ NUMTODSINTERVAL(-86400000*0.001,'SECOND')))t ORDER BY

m_2 ASC,m_1 ASC,t.STIME ASC

我想做的是简单地以我将拥有的方式修改它:

在哪里(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;
   }
Run Code Online (Sandbox Code Playgroud)

然后我试着用这种方式:

 if(sqlToTrim.lastIndexOf("\\) t") > 0){
                replaceLast(sqlToTrim, "\\) t ", " ");
                addLastParanthesis(sqlToTrim);
            }
Run Code Online (Sandbox Code Playgroud)

但它没有被替换,基本上没有任何变化 - replaceLast从未使用过.我假设我搞乱了正则表达式,我搜索了堆栈溢出,但似乎\是我应该放在之前的正确组合).在此先感谢您的帮助.谁能告诉我我做错了什么?

如果你需要知道,为什么我这样做,为什么这样 - 遗留代码......

ζ--*_*ζ-- 5

字符串是不可变的.replaceLast(sqlToTrim, "\\) t ", " ");返回一个新字符串.做:

sqlToTrim = replaceLast(sqlToTrim, "\\) t ", " ");
Run Code Online (Sandbox Code Playgroud)

并继续从那里.如果addLastParenthesis修改了字符串,它应该返回它,即

sqlToTrim = replaceLast(sqlToTrim, "\\) t ", " ");
sqlToTrim = addLastparenthesis(sqlToTrim);
Run Code Online (Sandbox Code Playgroud)