我有一个用户输入的字符串。
我试图用空格替换所有非大写字母(即数字或符号),而不使用replace()
,Stringbuilders
或arrays
等方法。
这是我到目前为止所做的:
public static void formatPlaintext(String sentence){
String sentenceUpper = sentence.toUpperCase();
System.out.println(sentenceUpper);
String emptyString = " ";
for(int i = 0; i< sentenceUpper.length() ; i++){
char ch = sentenceUpper.charAt(i);
if(ch < 'A' || ch > 'Z'){
ch = emptyString.charAt(0);
}
}
}//end of formatPlaintext
我不断收到String索引超出范围的错误。我相信它与:
有关ch = emptyString.charAt(0);
因为emptyString没有任何字符。但即使我把一个任意常数放入其中,它也不会用这个任意常数替换非字母。
答案 0 :(得分:3)
这不是如何替换Java字符串中的字符。在Java中,字符串是不可变的,因此您无法设置任何给定的索引。此外,charAt()
方法不会也无法对您调用它的字符串执行任何操作 - 只需返回该位置的char
即可。最后,您可能不应该使用void
- 返回在方法结尾处替换了字符的String
,然后使用返回值。您可以使用string
类的静态string
方法迭代初始isUpperCase
并构建新的Character
来完成此操作:
public static String formatPlainText(String sentence)
{
String replacedSentence = "";
for(int i = 0; i< sentence.length() ; i++){
char ch = sentence.charAt(i);
if (Character.isUpperCase(ch)) {
replacedSentence += ch;
}
else {
replacedSentence += " ";
}
}
return replacedSentence;
}
如果您经常使用此功能,或者特别长Strings
,您应该绝对使用StringBuilder
- 逐个字符地连接String
是非常低效的。
答案 1 :(得分:0)
你必须记住Java中的参数是作为值而不是作为引用传递的,在这种情况下,String是一个不可变对象,即当你进行连接或替换你时,不能更改String。有效地创建一个新的String。
我建议稍微修改一下代码以返回构建的新String。
public static String formatPlaintext(String sentence){
String sentenceUpper = sentence.toUpperCase();
System.out.println(sentenceUpper);
StringBuilder builder = new StringBuilder;
for(int i = 0; i< sentenceUpper.length() ; i++){
char ch = sentenceUpper.charAt(i);
if(ch < 'A' || ch > 'Z'){
builder.append(' ');
} else {
builder.append(ch);
}
}
return builder.toString();
}