Java里從來少不了字符串拼接的活,Java程序員也肯定用到過StringBuffer,StringBuilder,以及被編譯器優化掉的+=。但這些都和下文要談的無關。
比如有這樣的字符串:
張三將去某地點找李四。
其中,張三某地點和李四都是可變的,比如張三變成王五,某地點變成紐約,李四變成趙六。於是整句變成:
王五將去紐約找趙六。
如果直接將張三,某地點和李四用變量替代,再拼接起來,可以達到目的。但是,代碼不好寫,也不好看,也不好維護。但是,我看過很多SQL拼接,HTML拼接都是這樣做的。我自己以前也是這樣,自從接觸了MessageFormat.format之后才意識到有更好的形式。請看下面的代碼:
String[] tdArr=...;
String result=MessageFormat.format("<tr bgcolor='#cef'><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td></tr>", tdArr);
這段代碼將把數組tdArr中的四個元素分別插入到{0},{1},{2},{3}的位置。
你看看,是不是這樣形式和內容有效的分開了。容易想象,當元素增多時,這種方式優勢很明顯。
一件事有很多手段來達成,知道那種手段更好,是你經驗的體現和專業化的特征。
補記:
如果字符串需要輸出單引號',可以用兩個單引號''進行轉義,下面代碼請參考:
public int insertToTest_tb(String createTime,String datefrom,String dateto,String name,String intranetid,String actualhour,String planhour,String status) throws Exception{
StringBuilder sb=new StringBuilder();
sb.append(" insert into test_tb (");
sb.append(" createTime, ");
sb.append(" datefrom, ");
sb.append(" dateto, ");
sb.append(" name, ");
sb.append(" intranetid, ");
sb.append(" actualhour, ");
sb.append(" planhour, ");
sb.append(" status");
sb.append(" ) values (");
sb.append(" ''{0}'',");
sb.append(" ''{1}'',");
sb.append(" ''{2}'',");
sb.append(" ''{3}'',");
sb.append(" ''{4}'',");
sb.append(" ''{5}'',");
sb.append(" ''{6}'',");
sb.append(" ''{7}''");
sb.append(" )");
String result=sb.toString();
Object[] arr={createTime,datefrom,dateto,name,intranetid,actualhour,planhour,status};
String sql=MessageFormat.format(result, arr);
return this.getJdbcTemplate().update(sql);
}