我想让每个空格后面的字母都变成大写。有人能告诉我下列方法有什么问题吗?鉴于 phrase
“this is a test”返回“this is a test”而不是“this is a test”
public String toTitleCase(String phrase) {
for (int i=0; i<phrase.length(); i++) {
if(phrase.substring(i,i+1).equals(" ")) {
phrase = phrase.replace(phrase.substring(i+1,i+2),phrase.substring(i+1,i+2).toUpperCase());
}
}
return phrase;
}
5条答案
按热度按时间ny6fqffe1#
使用streams(或split)将字符串拆分为多个部分,不要手动使用substring。
尝试以下代码
输出:
This Is A Test
xytpbqjk2#
当您替换一个子串时,它将替换该子串的每一个匹配项—不一定是您要替换的子串。这就是为什么它要替换单词中的字母。
在这里切换到stringbuilder以插入单个字符。请注意,我们不会遍历整个字符串,因为最后一个字符没有下一个要大写的字符。
zf2sa74q3#
如果一个字母在任何一个单词中都是第一个,那么它将在任何地方被替换。在你的情况下,所有的t,i和a都是大写的。以is为例。以前找个地方是很困难的。而不是在身体里,实际上发生了什么:
所有的我都被我取代了。字符串类不能在特定位置替换。
您必须选择:
使用可以在特定位置替换的stringbuilder。
或者使用stream,这是我比较喜欢的方法,因为只有一行。这样您就不会保留空格(多个连续的空格将被替换为只有一个空格),但通常您需要这样做。
s4chpxco4#
代码中的问题是
String.replace
替换中存在的每个目标角色String
不仅是你想要的。您可以直接处理字符数组,而不是
String
:z9ju0rcb5#
它正在取代一切
t
,请尝试以下代码。它会帮助你的。