我有这个Java函数,它应该将字符串s
转换为标题大小写。它应该将s
的副本返回给调用方,保留s
。
目前,rv
最终为空字符串。谁能告诉我为什么?
private static String titleCase(String s) {
String rv = new String();
StringTokenizer strtok = new StringTokenizer(s);
// handle the potential null error: (should really output a runtime warning here)
if(s == null) return null;
while(strtok.hasMoreTokens()) {
String word = strtok.nextToken();
String firstLetter = word.substring(0,1);
String restOfWord = word.substring(1);
rv.concat(firstLetter.toUpperCase() + restOfWord.toLowerCase());
}
return rv;
}
答案 0 :(得分:4)
字符串在Java中是不可变的,一旦你声明rv为“”(= new String())它就不会改变,除非你为它分配一个新的String。 您可以通过以下方式替换concat行:
rv = rv.concat(firstLetter.toUpperCase() + restOfWord.toLowerCase());
或者更好的是,使用StringBuilder而不是String(未测试):
StringBuilder rv = new StringBuilder();
// [...]
rv.append(firstLetter.toUpperCase()).append(restOfWord.toLowerCase());
// [...]
return rv.toString();
答案 1 :(得分:0)