1

我有以下代码将单词的第一个字母大写。当我尝试将我的关键功能浓缩在一个单行中时,我发现它没有按预期工作。这是代码;

import java.util.*;
public class CapitalizeName {
   public static void main(String[] args) {
      String name="My naMe is ALex";
      String words="";
      String[] names=name.split(" ");
      for (String w: names) {
         w=w.toUpperCase(); //line 8
         w=w.replace(w.substring(1), w.substring(1).toLowerCase());  //line 9    
         //this single liner doesnot work:
         //w=w.toUpperCase().replace(w.substring(1), w.substring(1).toLowerCase());
        words+=w+" ";
      }
      System.out.println(words.trim());
     }  
    } 

输出是:

我的名字叫亚历克斯

当我注释掉第 8 行和第 9 行并取消注释第 9 行时,我得到以下意外输出:MY NAME IS ALEX。任何帮助表示赞赏?

4

2 回答 2

4

这行不通

w=w.toUpperCase().replace(w.substring(1), w.substring(1).toLowerCase())

因为w.substring(1)不一样w.toUpperCase

基本上你有...

w = "MY NAME IS ALEX".replace("y Name Is Alex", "y name is alex");

正如你所看到的,没有什么String可以匹配的。大写字符与提供的String值不匹配

你的双线方法更像是......

 w=w.toUpperCase(); // "MY NAME IS ALEX"
 w="MY NAME IS ALEX".replace("Y NAME IS ALEX", "y name is alex");

String无法匹配文本。

请记住,这些方法区分大小写

于 2013-07-16T01:31:31.837 回答
1

这行代码可以工作

w = w.toUpperCase().replace(w.toUpperCase().substring(1),
                    w.substring(1).toLowerCase());
于 2013-07-16T03:53:54.583 回答