劍指offer刷題day02

wzg20180325發表於2020-10-18

刷題(劍指offer02)

替換空格

題目:
  請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy
分析1:
  題目所給的函式的引數為stringbuffer型別,考察的是對字串的相關內容的瞭解程度。因此,需要對字元型別進行系統的複習。
Java字串主要包含 String類和StringBuffer類和Stringbuilder類,關於2個型別的差別主要是在這裡插入圖片描述
  如果一個StringBuffer物件在字串緩衝區被多個執行緒使用時,StringBuffer中很多方法可以帶有synchronized關鍵字,所以可以保證執行緒是安全的,但StringBuilder的方法則沒有該關鍵字,所以不能保證執行緒安全,有可能會出現一些錯誤的操作。所以如果要進行的操作是多執行緒的,那麼就要使用StringBuffer,但是在單執行緒的情況下,還是建議使用速度比較快的StringBuilder。

  (一個執行緒訪問一個物件中的synchronized(this)同步程式碼塊時,其他試圖訪問該物件的執行緒將被阻塞)。
另外字串的一些常用操作如下:(其操作函式如下):
1.獲取字串中的第i個字元方法charAt(i)
2.獲取指定位置的字元方法getChars(4個引數)

  str.getChars(indexBegin,indexEnd,array,arrayBegin);

3.字串的比較函式
  int result = str1.compareTo(str2);
  int result = str1.compareToIgnoreCase(str2);
  boolean result = str1.equals(str2);
  boolean result = str1.equalsIgnoreCase(str2);
4.相互轉換
轉化為其他型別:
  Integer.parseInt(str)
轉換為字串型別:
  String.valueOf([int] i)
  Int.toString([int] i)
5.字串查詢
  indexOf()方法
  lastIndexOf()方法
6.字串擷取與拆分
擷取substring()方法 :
  格式1:String result = str.substring(index);
  格式2:String result = str.substring(beginIndex,EndIndex);
拆分split()方法:
  格式1 :String strArray[] = str.split(正規表示式);
  格式2:String strArray[] = str.split(正規表示式,limit);
本題的解題思路有2:
1:直接呼叫Java的字串替代函式:replace函式
樣例為:

public static void main(String[] args) {
        System.out.println("hello$".replaceAll("$",""));
        System.out.println("hello$".replace("$",""));
        System.out.println("hello$".replaceAll("\\$",""));
    }
    
輸出結果如下:
hello$
hello
hello

replace對應的是普通字串,replaceAll對應的是正規表示式。
所以本題可通過程式碼如下解決:

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	 return str.toString().replace(" ", "%20");
    }
}

同理可以通過如下程式碼:

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	 int n = str.length();
        for(int i=0; i<n; i++) {
        //charAt函式是字串使用比較頻繁的api。
            if(str.charAt(i) == ' ') {
                n += 2;
                str.replace(i, i+1, "%20");
            }
        }
        return str.toString();
    }
}

特別需要注意的是+符號=符號一定要使用英文符號,不然的話,會一直顯示編譯不通過的。

相關文章