2014-02-25 37 views
4

我完全意識到字符串是不可變的,不能改變,可以是「editabile」 - 哦爭議!所以我試圖讓沒有用於java中字符串的replace()方法,以實現字符串中特定字符與另一個字符交換的位置。我想盡可能簡單地做到這一點,而不需要導入任何util或使用數組。到目前爲止,我已經得到它來改變字符,但它沒有正確返回,或者,那是...字符串結束。Java - 遞歸替換字符串中的字母

public static void main(String[] args) { 
    String words = "hello world, i am a java program, how are you today?"; 
    char from = 'a'; 
    char to = '/'; 

    replace(s, from, to); 
} 
public static String replace(String s, char from, char to){ 
    if (s.length() < 1) 
     return s; 
    if (s.charAt(0) == from) { 
     s = to + s.substring(1); 
    } 
    System.out.println(s); 
return s.charAt(0) + replace(s.substring(1, s.length()), from, to); 
} 
+2

使用StringBuilder,因爲它就是它的用途。這樣做沒什麼奇怪的,事實上它比遞歸更清潔簡單。 –

+0

你想修改現有的字符串還是從現有的字符串創建一個新的字符串? – Kakarot

+0

在你的return語句中,你最終創建了一個不符合你提到的要求的String實例。 – Kakarot

回答

-1

是的,氣墊船滿是鰻魚是正確的。 StringBuilder是你的朋友。它是可變的,你可以將你的字符串提供給StringBuilder,然後做交換並在最後調用toString()並完成。

0

您可以使用Java預定義的類StringBuilder。它比直接連接和操縱字符串更有效。 StringBuilder也有一個replace()方法來解決你的問題。見文檔StringBuilder#replace

2

您可以通過使用「的charAt」方法用於字符串的把適當的字符轉換成一個StringBuffer,然後運行「的toString」關於StringBuffer的

public class Replacement { 
public static void main(String[] args) { 
    String words = "hello world, i am a java program, how are you today?"; 
    char from = 'a'; 
    char to = '/'; 

    String changed = replace(words, from, to); 
    System.out.println(words); 
    System.out.println(changed); 
} 

public static String replace(String s, char from, char to) { 
    StringBuffer result = new StringBuffer(s.length()); 

    for (int i = 0; i < s.length(); i++) { 
     if (s.charAt(i) == from) { 
      result.append(to); 
     } else { 
      result.append(s.charAt(i)); 
     } 
    } 
    return result.toString(); 

} 

}

+0

使用StringBuilder +1。我個人喜歡非遞歸版本,因爲它更乾淨,更易於理解。 – tonga

+0

@tonga - 它使用在多線程執行中很有用的StringBuffer – unnamed

5

如何工作的這這個罷工嗎?有趣的尾巴遞歸。

public class Demo { 

    public static void main(String[] args) { 
    String words = "hello world, i am a java program, how are you today?"; 
    char from = 'a'; 
    char to = '/'; 

    System.out.println(replace(words, from, to)); 
    } 

    public static String replace(String s, char from, char to){ 
    if (s.length() < 1) { 
     return s; 
    } 
    else { 
     char first = from == s.charAt(0) ? to : s.charAt(0); 
     return first + replace(s.substring(1), from, to); 
    } 
    } 

} 

輸出:

C:\>java Demo 
hello world, i /m/j/v/ progr/m, how /re you tod/y? 
+0

這是最好的方法。 – Chandru

2
Try this code work for u enjoy it 
    public static void main(String[] args) { 
    String words = "hello world, i am a java program, how are you today?"; 
    char from = 'a'; 
    char to = '/'; 

    //String ss = words.replace(from, to); 
    System.out.println(words); 
    String ss = replace(words, from, to);// recieveing String from replace() 
    System.out.println("New Replace String is => "+ss); 
    } 

public static String replace(String s, char from, char to){ 
    if (s.length() < 1) 
     return s; 
     for(int i=0;i<s.length();i++){ 
     if (s.charAt(i) == from) { 
      s = s.substring(0, i)+to + s.substring(++i); 
      System.out.println(s); 
      return replace(s, from, to);//calling replace() 
     } 
    } 
    return s; 
} 

* 輸出爲*新的替換字符串是=>的hello world,I/M/J/V /程序控制/ M,如何/重新您TOD/Y?