2016-02-27 497 views
0

我做這樣的事情Java - 使用數組中的值的replace()方法正在改變數組值?

public static String[] list = {"a","b","c","d",} //It gives me a NullPointeException if I didn't use static 
public String encrypt(String a){ 
    a = a.replace(list[0],list[2]); 
    a = a.replace(list[4],list[3]); 
    return a; 
} 

,我有,只是顛倒它

public String decrypt(String a){ 
    a = a.replace(list[2],list[0]); 
    a = a.replace(list[3],list[4]); 
    return a; 
} 

當然,這簡化了另一種方法,我使用的是真正的代碼採用全字母和一些數字。所以這裏是我的問題:如果我輸入類似123encrypt()和它輸出ngV然後我輸入ngV解密()它給了我像1q3。只有一些字母被正確切換,有些則沒有。有沒有用replace()方法使用我缺少的數組值?我顯然是Java的新手。

此外我讀Java replace() problemsreplaceAll()沒有工作。

+0

字符串是不可變的,所以你需要存儲'a.replace(...);' – Tunaki

+0

'的結果如果我在123輸入encrypt()並輸出ngV「這絕不會發生。 – Joni

+0

我很抱歉,我再次編輯我的代碼。我有一個= a.replace(); 所以Tunaki你是否建議我存儲a.replace的結果。 但是,問題仍然是一樣的,你想給我一個視頻展示它嗎? –

回答

1

我懷疑你的問題是「爲什麼鏈接.replace奇怪地行事」,並且數組沒有改變。你可以證明替換不會很容易地改變陣列:

System.out.println(Arrays.toString(list)); 
    encrypt("abc"); 
    System.out.println(Arrays.toString(list)); 

那麼你的代碼是怎麼回事?每次你用一個新的字符串代替一個字母時,你再次替換字母。我沒有你的全部源代碼,所以我會用一個真正簡單的版本顯示:

a = a.replace("a", "b"); 
a = a.replace("b", "c"); 
a = a.replace("c", "d"); 

爲「ABC」是......「DDD」。

答案是每次查看每個字母並更改它。循環遍歷字符串並創建一個新字符串。