我有以下代码来将单词的首字母大写。 当我尝试将我的关键函数压缩在一行中时,我发现它没有按预期工作。 这是代码;
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());
}
}
输出是:
My Name Is Alex
当我注释掉第 8 行和第 9 行并取消注释第 9 行制作一个衬里时,我得到以下意外输出:MY NAME IS ALEX。 感谢任何帮助?
最佳答案
这行不通
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
无法匹配文本。
记住,这些方法区分大小写
关于java - 使用 Java 字符串替换方法产生与预期不同的结果,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17666582/