为什么“ z”个字符串数组元素没有变化?

时间:2019-04-06 12:05:11

标签: java string replace

我正在练习一个程序,用“ E”替换所有“ S”,反之亦然。必须在几个字符串中完成此任务。

我尝试了几件事(例如使用replace()),但是我不明白这是怎么回事。

int a;
Scanner s = new Scanner(System.in);
a = s.nextInt();
String[] x = new String[a];
String[] z = new String[a];
for (int i = 0; i < a; i++) {
    x[i] = s.next();
}
for (int i = 0; i < a; i++) {
    z[i]=x[i].replaceAll("S","A");
    z[i]=x[i].replaceAll("E","S");
    z[i]=x[i].replaceAll("A","E");
    System.out.println(z[i]);
}

对于字符串SEES,显示的结果应该是ESSE,但是答案是SEES。

3 个答案:

答案 0 :(得分:2)

您想做的是:

  1. 输入“ SEES”
  2. 将“ SEES”中的所有“ S”替换为“ A”,并获得“ AEEA”
  3. 将“ AEEA”中的所有“ E”替换为“ S”,并获得“ ASSA”
  4. 将“ ASSA”中的所有“ A”替换为“ E”,并获得“ ESSE”

但是您总是在初始输入 x上进行操作,因此您实际要做的是:

  1. 输入“ SEES”
  2. 将“ SEES”中的所有“ S”替换为“ A”,并获得“ AEEA”
  3. 将“ SEES”中的所有“ E”替换为“ S”并获得“ SSSS”
  4. 将“ SEES”中的所有“ A”替换为“ E”,并获得“ SEES”

这是您的固定代码:

int a;
Scanner s = new Scanner(System.in);
a = s.nextInt();
String[] x = new String[a];
String[] z = new String[a];
for (int i = 0; i < a; i++) {
    x[i] = s.next();
}
for (int i = 0; i < a; i++) {
    z[i]=x[i].replaceAll("S","A");
    z[i]=z[i].replaceAll("E","S");
    z[i]=z[i].replaceAll("A","E");
    System.out.println(z[i]);
}

请注意从x[i].replaceAllz[i].replaceAll的两个变化。

答案 1 :(得分:1)

此行:

z[i]=x[i].replaceAll("S","A");

您将更改存储在z[i]中。然后用这一行:

z[i]=x[i].replaceAll("E","S");

您用新的设置覆盖了z[i]中的先前更改。
最后一行:

z[i]=x[i].replaceAll("A","E");

您再次覆盖z[i]中的先前更改。
因此,如果您的原始字符串是SEES,那么最后一行会将所有A替换为E,并且由于A中没有SEES,因此该字符串仍然存在保持不变。

答案 2 :(得分:1)

程序中的问题是,您没有意识到x[i].replaceAll()不会更改x[i]的值。只有返回的String具有替换值。

您可以像下面的程序中那样使用单个数组来完成此操作。

import java.util.Arrays;

public class StringReplace {
  public static void main(String[] args) {
    String[] x = new String[4];
    x[0] = "S";
    x[1] = "E";
    x[2] = "E";
    x[3] = "S";

    System.out.println("Input:  " + Arrays.toString(x));
    for (int i = 0; i < 4; i++) {
      x[i]=x[i].replaceAll("S","A");
      x[i]=x[i].replaceAll("E","S");
      x[i]=x[i].replaceAll("A","E");
    }
    System.out.println("Output: " + Arrays.toString(x));
  }
}

结果:

Input:  [S, E, E, S]
Output: [E, S, S, E]