[英]Replacing characters
我有一個由用戶輸入的字符串。 我試圖用空格替換所有非大寫字母(即數字或符號),而不使用諸如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
我不斷收到字符串索引超出范圍的錯誤。 我相信這與:
ch = emptyString.charAt(0);
因為emptyString沒有任何字符。 但是,即使我輸入了一個任意常量,它也不會用此任意常量替換非字母。
這不是替換Java字符串中的字符的方式。 在Java中,字符串是不可變的,因此您無法設置任何給定的索引。 另外, charAt()
方法也不會對正在調用它的字符串做任何事情-它所做的只是在該位置返回char
。 最后,您可能不應該使用void
返回在方法末尾替換了字符的String
,然后使用返回值。 您可以通過使用Character
類的靜態isUpperCase
方法遍歷初始string
並構建新string
來完成此操作:
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
,或者對於特別長的Strings
,則應絕對使用StringBuilder
-在逐個字符的基礎上串聯String
效率很低。
您必須記住,Java中的參數是作為值而不是作為引用傳遞的,在這種情況下,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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.