2013-03-01 74 views
0
for (int i= 0; i<inputAxiom.length(); i++) 
{ 
    char c=inputAxiom.charAt(i); 

    if (c == 'f' || c == 'h' || c == 'g') 
    { 
    if (rules[0].equals("f") || rules[0].equals("h")); 
    { 
     inputAxiom = rules[1]; 
    } 

你好我想要做的就是從inputAxiom獲取用戶輸入併爲每F或H我想輸入的那部分改變在輸入字符改變

例如:如果inputAxiom = fff並且規則是f = fh(其將f設置爲規則[0]並且fh規則爲[1])

然後它將改變爲f-hf-hf-h(將每個f改變爲fh)

目前只要它發現f只是改變整個事情而不是fh而不是每個f

我認爲這跟

inputAxiom = rules[1]; 

但林不知道如何解決它

+0

字符串是不可變的。你可能會想用char'] charArray = str.toCharArray();將字符串更改爲char數組 - 然後做任何你需要的操作。如果您預見自己將一個輸入字符替換爲多個替換字符,則應該將該char []轉換爲List等集合。 – 2013-03-01 02:27:01

+1

你能發佈一個最小的可編譯示例嗎?也就是說,最少的代碼來證明問題,但我們可以複製到我們的編輯器中,編譯並運行? – apnorton 2013-03-01 02:28:02

+0

您正在將inputAxiom引用分配給包含@規則的字符串[1] .... – user1428716 2013-03-01 02:29:25

回答

1

字符串是不可改變的。您不能更改現有String實例的一部分。你可以做的是用原始字符串的修改後的副本替換它。

例如,更換所有ff-h,你會怎麼做:

outputAxiom = inputAxiom.replaceAll("f", "h-f"); 

操作字符串的另一種可能性是StringBuilder API(不要誤以爲是StringBuffer,它不建議了)。

0

您正在改變整個字符串:

inputAxiom = rules[1]; 

爲了通過您的陣列,以改變特定字符,循環是這樣的:

var chars = inputAxiom.toCharArray(); 
for (int i= 0; i<inputAxiom.length(); i++) 
{ 
    char c=inputAxiom.charAt(i); 

    if (c == 'f' || c == 'h' || c == 'g') 
    { 
    if (rules[0].equals("f") || rules[0].equals("h")); 
    { 
     chars[i] = rules[1]; 
    } 
    } 
} 

如果你想插入人物衆多,這將工作::

inputAxiom = inputAxiom.replaceAll(rules[0], rules[2]).replaceAll(rules[1], rules[2]);