在Java程序中做字符串拼接時一定要記得的MessageFormat.format


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);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM