我有以下代码来大写首字母。 当我尝试在单行中压缩我的键功能时,我发现它没有按预期工作。 这是代码;
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。 任何帮助表示赞赏?
答案 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());