2016-02-27 504 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”。

答案是每次查看每个字母并更改它。循环遍历字符串并创建一个新字符串。