簡體   English   中英

替換字符

[英]Replacing characters

我有一個由用戶輸入的字符串。 我試圖用空格替換所有非大寫字母(即數字或符號),而不使用諸如replace()Stringbuildersarrays

這是我到目前為止所擁有的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM