2012-08-16 64 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(); 
相关问题