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

使用数组中的值的Java-replace()方法正在更改数组值吗?,java,arrays,encryption,replace,replaceall,Java,Arrays,Encryption,Replace,Replaceall,我在做类似的事情 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 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;
}
当然这是简化的,我使用的真实代码使用了整个字母表和一些数字。这就是我的问题:如果我在
encrypt()
中输入像
123
这样的东西,它输出
ngV
,然后我在decrypt()中输入
ngV
,它会给我像
1q3
。只有部分字母正确切换,而另一些字母没有正确切换。使用数组值的
replace()?我显然是Java新手


我也读了,但是
replaceAll()
没有起作用。

我怀疑你的问题是“为什么链接
。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’


答案是一次看一个字母,然后改变它。循环遍历字符串并创建一个新字符串。

字符串是不可变的,因此需要存储
a.replace(…)的结果“如果我在encrypt()中输入像123这样的东西,它就会输出ngV”,这永远不会发生。我很抱歉,伙计们,我再次编辑了我的代码。我有a=a.replace();那么Tunaki你是在建议我存储a.replace的结果吗。然而,问题仍然是一样的,你想要我演示它的视频吗?@MichaelChen使用用户名前的“@”向他发送通知。请提供完整的示例。上面发布的代码不起作用:数组不能这样分配,并且
list[4]
不存在。将问题分解为您自己的小样本程序,并将其发布在此处。