我在写一个赋值方法。用Java划分和字符串中的单词
描述:如果一个字符串包含一个包含大写字母的单词,我的方法需要大写整个单词。
所以“你好计算器,我的名字是约翰”将产生“你好计算器,我的名字是约翰”
我的代码:
/*Helper method for capitalizeWords() capitalizes word if necesarry*/
private static String capitalizeWord(String s, int position) {
int i = position;
String word = "";
String testWord = "";
while (s.charAt(i) != ' ' && i < s.length() - 1) {
word += s.charAt(i);
i++;
}
word += " ";
testWord = word.toLowerCase();
if (!testWord.equals(word)) {
word = word.toUpperCase();
}
return word;
}
public static String capitalizeWords(String s) {
StringBuilder newString = new StringBuilder();
if (s.length() == 1) {
newString.append(s.charAt(0));
return newString.toString();
}
for (int i = 0; i < s.length(); i++) {
if (i == 0) {
newString.append(capitalizeWord(s, i));
} else if (s.charAt(i) == ' ') {
newString.append(capitalizeWord(s, i + 1));
}
}
return newString.toString();
}
正如你可以看到我的代码是低效的,当运行,跳过字符串的最后一个字符:
HW2.capitalizeWords("Guess what?? There are twenty-sIx letters in the English alphABEt!")
"GUESS what?? THERE are TWENTY-SIX letters in the ENGLISH ALPHABET "
我不能想办法解决,而无需手动添加的最后一个字符,这可能将是对这个分配分折换货。我宁愿学习解决这个问题的正确,有效的方法(给出允许的方法),而不是努力想出一个粗略的解决方案。
你们有没有介意给我一些想法?我不能使用substring
或indexOf
。
我会看看使用.split方法并提供一个空格作为参数。看到这里:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String) –
是的开始与分割字符串的字或者字符串.split或一个StringTokenizer。然后,您可以检查每个单词的第一个字符,以决定是否必须将其大写。 – hotzst
@hotzst不一定是第一个,任何角色。 – Tunaki