我正在尝试编写代码以在句点“。”之后将首字母大写。
例如:
String str = "abcdef. ghijk, mlnopqrs. tuv .................."
//the "............" means the line is still going on.
输出应为:
"Abcdef. Ghijk, mlnopqrs. Tuv ................."
注意:仅使用基本方法
字符串:charAt
,indexOf
,length
,substring
,toUpperCase
这意味着没有Stringbuilder
,没有数组,没有拆分...等。我在本网站找到的其他解决方案涉及这些事情。
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围
从这里我不知道如何解决这个问题.-
答案 0 :(得分:1)
我可以帮助你解决逻辑部分:
希望这有帮助
答案 1 :(得分:1)
int length = str.length()
for(int x = 0; x < length-1; x++) {
if(str.charAt(x) == '.') {
str = str.substring(0,x+1) + (""+str.charAt(x+1)).toUpperCase() + str.substring(x+2,length+1);
}
}
如果字母不是直接在句点之后,要么向前看两个,要么循环以寻找下一个字母。你可以说
letter = str.charAt(x);
if((letter >= 'A' && letter <= 'Z") || (letter >= 'a') && letter <= 'z'))
答案 2 :(得分:1)
我会这样做:
String.toCharArray()
获取字符数组。String.valueOf()
答案 3 :(得分:0)
构建一个具有2个状态的状态机并让它扫描字符。
从状态1开始:如果输入是句号
,则切换到状态2状态2:如果输入不是句点而不是空格,则切换到状态1
状态1:输出无需修改的输入
状态2:如果输入是一个字符,则输出大写为toUpper
import java.util.Scanner;
public class Capitalize {
public static void main (String [] args) {
Capitalize instance = new Capitalize();
try (Scanner s = new Scanner(System.in)) {
while (s.hasNext()) {
instance.capitalize_and_print(s.nextLine());
}
}
}
public void capitalize_and_print (String s) {
int state = 0;
for (int i = 0; i < s.length(); ++i) {
switch (state) {
case 0:
System.out.print(s.charAt(i));
if (s.charAt(i) == '.') {
state = 1;
}
break;
case 1:
System.out.print(Character.toUpperCase(s.charAt(i)));
if (s.charAt(i) != '.' && s.charAt(i) != ' ') {
state = 0;
}
break;
}
}
}
}
更新:更简单的版本
public class Capitalize {
public static void main (String [] args) throws java.io.IOException {
int state = 2;
int c = System.in.read();
while (c != -1) {
if (state == 1) {
System.out.print((char)c);
if (c == '.') {
state = 2;
}
} else {
System.out.print(Character.toUpperCase((char)c));
if (c != '.' && c != ' ') {
state = 1;
}
}
c = System.in.read();
}
}
}
更新2:更简单的版本
public class Capitalize {
public static void main (String [] args) throws java.io.IOException {
String str = "abcdef. ghijk, mlnopqrs. tuv ..................";
int state = 2;
for (int i = 0; i < str.length(); ++i) {
char c = str.charAt(i);
if (state == 1) {
System.out.print(c);
if (c == '.') {
state = 2;
}
} else {
System.out.print(Character.toUpperCase(c));
if (c != '.' && c != ' ') {
state = 1;
}
}
}
}
}