我一直在尝试编写一个Java程序,它将字符串中每个单词的第一个字母转换为大写字母。现在它看起来像这样:
package strings;
import java.util.Scanner;
public class small_cap {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the sentence");
String st = sc.next();
String str = " " + st;
int j = 0; char chr = ' ';
for (int i = 0; i < str.length(); i++){
j = i + 1;
chr = str.charAt(j);
if (chr == ' '){
char a = Character.toUpperCase(str.charAt(j));
str = str.replace(str.charAt(j), a);
}
else{
char a = Character.toLowerCase(str.charAt(j));
str = str.replace(str.charAt(j), a);
}
}
System.out.println(str);
}
}
不幸的是我继续收到错误:
java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(String.java:658)
at small_cap.main(small_cap.java:19)
我真的没有看到代码中的任何错误。有人可以指出我哪里出错吗?
答案 0 :(得分:0)
for (int i = 0; i < str.length(); i++){
j = i + 1;
当i
到达最后一个有效索引length - 1
时,j
将等于length
,这超出了界限。
我真的没有看到j
变量开头的意思 - 你是不是也想在循环中的其他地方使用i
,或者你应该让你的循环从1?或者你是否意味着通过j = i - 1;
检查前一个字符(在这种情况下确保你在索引0之前没有读过)
答案 1 :(得分:0)
您正在使用String.Replace,它将替换所有匹配的字符,无论其位置如何。
import java.util.Scanner;
public class small_cap {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the sentence");
String st = sc.nextLine();
String str = " " + st;
int j = 0; char chr = ' ';
for (int i = 0; i < str.length()-1; i++){
j = i+1;
chr = str.charAt(i);
if (chr == ' '){
char a = Character.toUpperCase(str.charAt(j));
str = str.substring(0,j)+a+str.substring(j+1);
}
else{
char a = Character.toLowerCase(str.charAt(j));
str = str.substring(0,j)+a+str.substring(j+1);
}
}
System.out.println(str);
}
}