原始字符串:
String ss = "SELECT AA,BB FROM INVE_MASTER WHERE AA = ";现在要把离结尾最近的  AA  替换成   LOWER(AA)替换后的字符串:
SELECT AA,BB FROM INVE_MASTER WHERE LOWER(AA) = 
我的写法如下,但是觉得不是很好:
@Test
public void testReplace() {
String ss = "SELECT AA,BB FROM INVE_MASTER WHERE AA = ";
int index = ss.trim().lastIndexOf("AA");
int length = "AA".length();
//System.out.println(index);
//System.out.println(length);
String pre = ss.substring(0, index);
String center = ss.substring(index,index+length);
String suf = ss.substring(index+length,ss.length());
//System.out.println(pre);
//System.out.println(center);
//System.out.println(suf);

String newSQL = new StringBuffer(pre).append("LOWER(").append(center).append(")").append(suf).toString();
//System.out.println(newSQL);
}

解决方案 »

  1.   

    再判断一下是,sql是否空白,否存在AA(lastIndex != -1)就可以了实在追求效率的话,用StringBuilder,且设置大小
    String newSQL = new StringBuilder(sql.length() + 7)
      

  2.   

    用lastIndex  就行了
    不过 SQL根本不区分大小写  不知道转化为小写有何用
      

  3.   

    加LOWER 是为了 查询条件不区分大小啊比如,表中存的用户名是   AAABBCC  
    那用户输入 aAaB  之类的进行模糊查询可以匹配到
      

  4.   

    不能在原有的SQL上改么?如果不能那只能这样写了,因为没有replaceLast()这个方法,只有replaceFirst()这个方法。
      

  5.   

    有个bug没发现
            String ss = "SELECT AA,BB FROM INVE_MASTER WHERE AA = ";
            int index = ss.trim().lastIndexOf("AA");
            String pre = ss.substring(0, index);
            String center = ss.substring(index,index+length);
            String suf = ss.substring(index+length,ss.length());
      

  6.   

    System.out.print("SELECT AA,BB FROM INVE_MASTER WHERE AA=".replaceAll("AA( )*=", "LOWER(AA) ="));
      

  7.   

    从效率上来说
    用lastIndexOf()比用正则更好
    用append()代替String+String更好
    用StringBuilder又比StringBuffer更好
    在此前提下,最精炼的代码实现如下:
    public static String testReplace(String sql, String r) {
    int index = sql.lastIndexOf(r);
    return index<0? sql : new StringBuilder(sql.subSequence(0,index)).append("LOWER(").append(r).append(")").append(sql.substring(index+r.length())).toString(); 
    }
      

  8.   


    public static String testReplace(String sql, String r) {
    int index = sql.lastIndexOf(r);
    return index<0? sql : new StringBuilder(sql.subSequence(0,index)).append("LOWER(")
    .append(r).append(")").append(sql.substring(index+r.length())).toString(); 
    }