2012-08-16 63 views
0

我想要得到兩個字符串firstName和lastName,它們是完全大寫的,並且tring可以轉換除小寫字母以外的所有字符並連接所得字符串。在java中只有第一個字符的大寫字母的兩個字符串的連接

firstname =「TOM」; 姓氏=「HARRIS」;

輸出是:湯姆·哈里斯

我做它來實現:

String name = 
    firstName.substring(0,1).toUpperCase() 
    + firstName.substring(1).toLowerCase() 
    + " " 
    + lastName.substring(0,1).toUpperCase() 
    + lastName.substring(1).toLowerCase(); 

,但有沒有這樣做的任何其他方式?更有效的方法?

+1

爲什麼要轉變的第一個字符爲大寫的時候已經是大寫的,根據你的描述?不這樣做會刪除兩個'String'結構。 – hmjd 2012-08-16 07:51:23

回答

2

是的,你可以從Apache Commons Lang使用方法WordUtils.capitalizeFully()

String name = WordUtils.capitalizeFully(firstName + " " + lastName); 
+0

要求不是要全部大寫。 – hmjd 2012-08-16 07:52:59

+1

WordUtils.capitalizeFully定義爲_「將一個字符串中的所有空格分隔的單詞轉換爲大寫字母,即每個單詞由一個標題字符組成,然後是一系列小寫字母。」_因此這符合要求。 – Manuzor 2012-08-16 07:58:04

+0

我想轉換所有字符,但我的第一個小寫 – Sam 2012-08-16 07:59:27

0

由於字符串是不可變Java中,這樣做,許多串連它更有效地使用StringBuilder,像這樣的時候:

StringBuilder s = new StringBuilder(); 
String name = s.append(firstName.substring(0,1).toUpperCase()) 
       .append(firstName.substring(1).toLowerCase()) 
       .append(" ") 
       .append(lastName.substring(0,1).toUpperCase()) 
       .append(lastName.substring(1).toLowerCase()).toString(); 

由於這隻創建2個對象:String和StringBuilder,而不是像以前那樣創建4 *。

*連接字符串文字是在編譯時完成的,因此添加" "不會創建新對象。

+1

這不完全正確。從Java 1.5開始,編譯器使用StringBuilder優化「+」運算符。 http://caprazzi.net/posts/java-bytecode-string-concatenation-and-stringbuilder/ – 2012-08-16 08:15:29

+0

感謝您的糾正,我一直在謊言數月! – MrLore 2012-08-16 08:20:25

0

如果您需要在建立字符串Snippetory多一點控制可以幫助

Syntaxes.XML_ALIKE.parse("{v:x case='camelizeUpper' delimiter=' '}").append("x", firstName).append("x", lastName).toString(); 
相關問題