2012-07-19 59 views
3

我知道如何與另一個字符替換字符串中的某個字符超過1個字符:如何更換黑莓

的System.out.println(的replaceAll(「你在哪裏?」, 「?」,「」))

public static String replaceAll(String front, String pattern, String back){ 

    if (front == null) 
     return ""; 

    StringBuffer sb = new StringBuffer(); //A StringBuffer is created 
    int idx = -1; 
    int patIdx = 0; 

    while ((idx = front.indexOf(pattern, patIdx)) != -1) 
    { 
     sb.append(front.substring(patIdx, idx)); 
     sb.append(back); 
     patIdx = idx + pattern.length(); 
    } 

    sb.append(front.substring(patIdx)); 
    return sb.toString(); 
}  

此代碼將一個空的空間全部更換?,並會打印出來(「你在哪裏」)

現在我想知道的是如何我可以替換嗎?超過1個字符。在Java中,我可以只使用簡單的regex,但如果在黑莓我寫的東西,如:

System.out.println(replaceAll("Henry!! Where are you??", "!?", ""))

那麼黑莓不把它撿起來。那麼我如何克服黑莓手機的這個限制?

回答

4

沒有任何方法可以做到你想要的。但我可以建議你做一個array of string of the pattern which you want to replace。循環訪問字符串數組通過其位置獲取字符串並將其傳遞到您的

public static String replaceAll(String front, String pattern, String back)。希望這會幫助你 。

2

如果你想更換所使用的字符串pattern可以使用toCharArray()在字符串front任何字符,遍歷所有字符圖案,檢查哪個是第一,以取代(這是最近的)和替換它。我的意思是這樣的東西

public static String replaceAll(String front, String pattern, String back) { 

    if (front == null) 
     return ""; 

    StringBuffer sb = new StringBuffer(); // A StringBuffer is created 
    int idx = -1; 
    int patIdx = 0; 


    boolean end = true; 
    int tmp = -1; 

    do { 
     end = true; 
     for (char c : pattern.toCharArray()) { 
      //System.out.println("searching for->"+c+" from patIdx="+patIdx+" idx="+idx); 
      if ((tmp = front.indexOf(c, patIdx)) != -1) { 
       //System.out.println("FOUND->"+c+" from patIdx="+patIdx+" idx="+idx+" tmp="+tmp); 
       if (idx == -1 || idx == patIdx-1 || (idx > patIdx && tmp < idx)){ 
        end = false; 
        idx = tmp; 
        //System.out.println("setting replacement to ->"+c+" patIdx="+patIdx+" idx="+idx); 
       } 
      } 
     } 
     if (!end && idx != -1) { 
      //System.out.println("replacing patIdx="+patIdx+" idx="+idx); 
      sb.append(front.substring(patIdx, idx)); 
      sb.append(back); 
      patIdx = idx+1; 
     } 
     //System.out.println("----"); 
    }while(!end); 

    sb.append(front.substring(patIdx)); 
    return sb.toString(); 
}