我只需要对此澄清一下。 我在java上做了一些练习 -
编写一个静态方法,替换所有第一个字母 带有大写字母的字符串中的每个单词。 示例:字符串只是一个字符串---->字符串只是一个字符串
我能够完成所需的输出但是我对这部分代码感到困惑。
这个工作要点:
char j;
if (length > 1) {
for (int i = 0; i < length; i++) {
j = str2.charAt(i);
if (j == ' ') {
str = str + j + (Character.toUpperCase(str2.charAt(i + 1)));
i++; // for skip
} else {
str = str + j;
}
}
} else {
str = "Please enter a string.";
}
然而,当我以这种方式投入时,它不会工作:
Char j, k;
if (length > 1) {
for (int i = 0; i < length; i++) {
j = str2.charAt(i);
k = str2.charAt(i + 1);
if (j == ' ') {
str = str + j + (Character.toUpperCase(k));
i++; // for skip
} else {
str = str + j;
}
}
} else {
str = "Please enter a string.";
}
有人可以解释一下原因吗?我错过了什么或忽略了什么?
顺便说一句,这是完整的代码:
package exercises.exercisesday3.part1;
import java.util.Scanner;
public class Exercise5CapitalLetters {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.println("Enter source String: ");
String capital = myTitleCase(" " + input.nextLine());
System.out.println(capital);
input.close();
}
public static String myTitleCase(String capitalLetter) {
String str = "";
String str2 = capitalLetter.replaceAll("\\s+", " ");
int length = str2.length();
char j;
if (length > 1) {
for (int i = 0; i < length; i++) {
j = str2.charAt(i);
if (j == ' ') {
str = str + j + (Character.toUpperCase(str2.charAt(i + 1)));
i++; // for skip
} else {
str = str + j;
}
}
} else {
str = "Please enter a string.";
}
return str.trim();
}
}
答案 0 :(得分:0)
这是因为读取k的值的方式不正确k = str2.charAt(i + 1)
它应该更改,如下面的代码所示。
在您的代码中尝试访问超出所提供字符串长度的字符。
这应该是更正后的代码
char j, k=0;
if (length > 1) {
for (int i = 0; i < length; i++) {
j = str2.charAt(i);
if(i!=length-1){
k = str2.charAt(i + 1);
}
if (j == ' ') {
str = str + j + (Character.toUpperCase(k));
i++; // for skip
} else {
str = str + j;
}
}
} else {
str = "Please enter a string.";
}