在Java中,想要用一個字串模組根據引數的不同來產生不同的字串,主要有以下兩種辦法:
Java String.format()
在JDK1.5中,String類新增了一個很有用的靜態方法String.format().
format(Locale l, String format, Object... args) 使用指定的語言環境、格式字串和引數返回一個格式化字串;
format(String format, Object... args) 使用指定的格式字串和引數返回一個格式化字串。
在格式化字串中,大部分引數都比較符合C風格中的printf()函式,但是需要注意的是,在Java中,有一個可選的argument_index的十進位制的引數,用來表明引數在引數列表中的位置。第一個由“1$”引用,第二個由“2$”引用,以此類推。例如:
System.out.println(String.format("%s,%s,%1$s,%2$s,%1$s", "a", "b")); //輸出:a,b,a,b,a
Commons-lang StrSubstitutor
在Commons-lang中,給我們提供一個新的類叫做StrSubstitutor,專門用來做一些字串替換填充的事情。例如:
Map valuesMap = HashMap(); valuesMap.put("animal", "quick brown fox"); valuesMap.put("target", "lazy dog"); String templateString = "The ${animal} jumped over the ${target}."; StrSubstitutor sub = new StrSubstitutor(valuesMap); String resolvedString = sub.replace(templateString); //輸出:The quick brown fox jumped over the lazy dog.
聯想到的NamedParameterJdbcTemplate
這使我想起了曾經在使用JdbcTemplate的時候,SQL語句的引數都是用“?”作為佔位符,嚴重依賴於順序。為了解決這個問題,我們可以選擇使用Spring中的NamedParameterJdbcTemplate。這樣我們就可以使用“:”跟上變數名而不用依賴位置的先後順序了,而且可讀性也大大提高了。例如:
//insert with named parameter public void insertNamedParameter(Customer customer){ String sql ="INSERT INTO CUSTOMER (CUST_ID, NAME, AGE) VALUES (:custId, :name, :age)"; Map<String, Object]]> parameters =new HashMap<String, Object]]>(); parameters.put("custId", customer.getCustId()); parameters.put("name", customer.getName()); parameters.put("age", customer.getAge()); getSimpleJdbcTemplate().update(sql, parameters); }