2013-12-18 81 views
1

我有一個字符串,String originalString= "This car is my car";
我要替換「車」和「自行車」,而無需使用字符串replace()方法。字符串中的字符替換,而無需使用字符串替換()方法

class StringTest{ 
    public static void main(String[] args){ 
     String originalString = "This car is my car"; 
     String replacedString = replaceMethod(original, "car", "bike"); 
     System.out.println(replacedString); 
    } 
} 
static String replaceMethod(String original, String toReplace, String replacedWith){ 
    // enter code here 
    return ""; 
} 
+0

只需使用'String.replace'。或者使用匹配器和正則表達式(直接替換或使用appendReplacement/appendTail重建)。或者使用其他一次性的'indexOf/substring/split'並手動生成結果。我會堅持'String.replace',除非有一個「好」的理由。 – user2864740

+0

@ user2864740什麼是正確答案?如果你還沒有投票,請選擇幫助你的答案。謝謝。 –

回答

4

您可以分割的 「車」,然後用加入 「自行車」

import java.util.*; 

class StringTest 
{ 
    public static void main(String[] args) 
    { 
     String originalString = "This car is my car"; 
     String replacedString = replaceMethod(originalString, "car", "bike"); 
     System.out.println(replacedString); 
    } 

    static String replaceMethod(String str, String from, String to) 
    { 
     String[] arr = str.split(from); 
     StringBuilder output = new StringBuilder(); 

     int i = 0; 
     for (; i < arr.length - 1; i++) 
     output.append(arr[i]).append(to); 

     output.append(arr[i]); 
     if (str.substring(str.lastIndexOf(" ")).equalsIgnoreCase(" " + from)) 
      output.append(to); 

     return output.toString(); 
    } 
} 

originalString串聯

This car is my car 

輸出

This bike is my bike 

感謝Polywhirl先生爲他提供幫助。

+0

它是「分裂」而不是「分裂」。 – Maroun

+0

謝謝@Mr。 Polywhirl,我只是想更新它。 –

+0

我剛剛驗證了兩次,我用輸出更新了帖子 –

0

,這不是一個很好的方式,但我們也可以這樣做

public static void main(String[] args) { 
     String org= "This car is my car"; 
     String [] temp=org.split(" "); 
     int len=temp.length; 
     String ne = ""; 
     for(int i=0;i<len;i++) 
     { 
      if(temp[i].matches("car")) 
       temp[i]="bike"; 
      ne=ne+temp[i]+" "; 

     } 
     System.out.println(ne); 
    } 
1

試試這個

static String replaceMethod(String original, String toReplace, 
     String replacedWith) { 
    for(;;) { 
     int i = original.indexOf(toReplace); 
     if (i == -1) { 
      break; 
     } 
     original = original.substring(0, i) + replacedWith + original.substring(i + toReplace.length()); 
    } 
    return original; 
} 

或更好,但只是copypaste Apache的StringUtils的方法

public static String replace(String text, String searchString, String replacement, int max) { 
    if (isEmpty(text) || isEmpty(searchString) || replacement == null || max == 0) { 
     return text; 
    } 
    int start = 0; 
    int end = text.indexOf(searchString, start); 
    if (end == INDEX_NOT_FOUND) { 
     return text; 
    } 
    int replLength = searchString.length(); 
    int increase = replacement.length() - replLength; 
    increase = increase < 0 ? 0 : increase; 
    increase *= max < 0 ? 16 : max > 64 ? 64 : max; 
    StringBuilder buf = new StringBuilder(text.length() + increase); 
    while (end != INDEX_NOT_FOUND) { 
     buf.append(text.substring(start, end)).append(replacement); 
     start = end + replLength; 
     if (--max == 0) { 
      break; 
     } 
     end = text.indexOf(searchString, start); 
    } 
    buf.append(text.substring(start)); 
    return buf.toString(); 
} 
+0

我會爲此使用StringBuilder。串聯太多... –

0

另一種選擇...

import java.util.*; 

class Replace { 
    public static void main (String[] args) { 
     String originalString = "This car is my car"; 
     String replacedString = replaceMe(originalString, "car", "bike"); 
     System.out.println(replacedString); 
    } 

    public static String replaceMe(String str, String from, String to) { 
     String[] arr = str.split(" "); 
     for (int i = 0; i < arr.length; i++) { 
      if (arr[i].equals(from)) { 
       arr[i] = to; 
      } 
     } 
     return join(arr, " "); 
    } 

    public static String join(String[] arr, String delim) { 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < arr.length; i++) { 
      sb.append(arr[i]); 

      if (i < arr.length - 1) 
       sb.append(delim); 
     } 
     return sb.toString(); 
    } 
} 
1

假設這是家庭作業,並且您正在尋找算法(這就是爲什麼您不使用String.replace),請記住字符串和數組基本相同,都可以迭代。

一個簡單的(低效)算法:

1.創建一個子方法到相對於主串中的當前索引匹配的子串。即

private boolean matchAt(String inputString, String target, int index){ 
    // YOUR CODE HERE - returns 'true' if the target string occurs in the 
    // inputString at the specified index. 
} 

2.遍歷輸入字符串,如果已找到目標單詞,則在每個字母處測試。

3.根據是否找到目標單詞,一次輸出一個字符到一個StringBuilder。

對於更有效的算法,看看如何字符串搜索可使用後綴匹配來實現以下鏈接:http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm