Java - 使用数组值的 replace() 方法正在更改数组值?

Java - replace() method using values from arrays is changing the array values?

我正在做类似

的事情
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;
}

当然这是简化的,我使用的真实代码使用了整个字母表和一些数字。所以这是我的问题:如果我将 123 之类的内容输入 encrypt() 并输出 ngV 然后我将 ngV 输入 decrypt() 它会给我 1q3 .只有一些字母被正确切换,而有些则没有。使用数组值的 replace() 方法有什么我遗漏的吗?我显然是 Java 的新手。

我也读了 replaceAll() 没有成功。

我怀疑你的问题是 "why is chaining .replace acting oddly" 并且数组没有改变。你可以很容易地证明 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'.

这个问题的答案是一次查看每个字母并进行更改。遍历字符串并创建一个新字符串。