使用Java String替换方法产生的结果与预期不同,为什么?

时间:2013-07-16 01:26:40

标签: java string replace substring uppercase

我有以下代码来大写首字母。 当我尝试在单行中压缩我的键功能时,我发现它没有按预期工作。 这是代码;

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());
     }  
    } 

输出是:

  

我的名字是Alex

当我注释第8行和第9行并取消注释第9行制作一个衬垫时,我得到以下意外输出:我的名字是ALEX。 任何帮助表示赞赏?

2 个答案:

答案 0 :(得分: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无法与文​​字匹配。

请记住,这些方法都是敏感的

答案 1 :(得分:1)

这一行代码将起作用

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