最近用到的关于一个字符串拼写的总结
String hql = "select * from TableA as ta where ta.id =1 group by ta.id order by ta.id desc";
int firstBlank = hql.indexOf(" ") ; //查找str第一个blank的下标位置,从0计算;结果6
int i = hql.toUpperCase().indexOf("FROM") ;//转换成大写(hql不变),其中第一个“FROM”的下标...;
String subHql = hql.substring(i) ; //从下标 i 开始的子字符串,"from X as x ......"
String[] ss = subHql.split(" ") ; //以“ ”(空格)为分割标志分割字符串,其结果为字符串数组
String entityStr = ss[3];
if(entityStr.indexOf(",") >= 0){
entityStr = entityStr.split(",")[0];
}
StringBuffer countHqlBuffer =
new StringBuffer(hql.substring(0, firstBlank+1))
.append("count(distinct ")
.append(entityStr)
.append(".id")
.append(") ");
if (groupbyIndex == -1)
countHqlBuffer.append(subHql);
else
countHqlBuffer.append(subHql.substring(0, groupbyIndex-1) );//取字符串下标从0开始到groupbyIndex-1(包含) 之间的生成新的字符串
得到的结果是:countHqlBuffer = "select count(distinct ta.id) from TableA as ta where ta.id = 1 ";