【问题标题】:Why is there no change in "z" String array elements?为什么“z”字符串数组元素没有变化?
【发布时间】:2019-04-06 12:05:11
【问题描述】:

我正在练习一个程序,其中我将所有的“S”替换为“E”,反之亦然。有几个字符串需要完成此任务。

我已经尝试了几件事(比如使用 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。

【问题讨论】:

  • 不确定您要做什么,但z[i]=x[i].replaceAll("A","E") 是最后一个,击败了所有的假设。
  • 另请注意,只有在您的字符串中没有 A 时它才能正常工作。

标签: java string replace


【解决方案1】:

你想要做的是:

  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 的两个变化。

【讨论】:

  • 代替'A',您可能需要考虑使用非字母,如'$',甚至'\0''\377' 作为'S' 的临时替换,按顺序避免意外将“真实”'A's 变成 'E's。
【解决方案2】:

用这一行:

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,那么最后一行会将所有As 替换为Es,并且由于SEES 中没有A,因此字符串保持不变。

【讨论】:

    【解决方案3】:

    您的程序中的问题是,您没有意识到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]
    

    【讨论】:

      猜你喜欢
      • 2019-11-12
      • 2010-09-09
      • 2020-05-08
      • 2023-01-02
      • 2020-07-09
      • 2019-08-11
      • 2014-11-02
      • 1970-01-01
      • 2013-06-03
      相关资源
      最近更新 更多