Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “为什么没有变化?”;z";字符串数组元素?_Java_String_Replace - Fatal编程技术网

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

Java “为什么没有变化?”;z";字符串数组元素?,java,string,replace,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.n

我正在练习一个程序,在这个程序中,我用“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]);
}
inta;
扫描仪s=新的扫描仪(System.in);
a=s.nextInt();
字符串[]x=新字符串[a];
字符串[]z=新字符串[a];
for(int i=0;i

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

您要做的是:

  • 输入“SEES”
  • 将“SEES”中的所有“S”替换为“A”,并获得“AEEA”
  • 将“AEEA”中的所有“E”替换为“S”,并获得“ASSA”
  • 将“ASSA”中的所有“A”替换为“E”,并获得“ESSE”
  • 但您总是对初始输入进行操作,因此您实际要做的是:

  • 输入“SEES”
  • 将“SEES”中的所有“S”替换为“A”,并获得“AEEA”
  • 将“SEES”中的所有“E”替换为“S”,并获得“SSSS”
  • 将“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]);
    }
    
    inta;
    扫描仪s=新的扫描仪(System.in);
    a=s.nextInt();
    字符串[]x=新字符串[a];
    字符串[]z=新字符串[a];
    for(int i=0;i
    请注意从
    x[i].replaceAll
    z[i].replaceAll

    的两个更改,使用此行:

    z[i]=x[i].replaceAll("S","A");
    
    z[i]=x[i].replaceAll("E","S");
    
    z[i]=x[i].replaceAll("A","E");
    
    将更改存储在
    z[i]
    中。然后用这句话:

    z[i]=x[i].replaceAll("S","A");
    
    z[i]=x[i].replaceAll("E","S");
    
    z[i]=x[i].replaceAll("A","E");
    
    您可以用新的更改覆盖
    z[i]
    中以前的更改
    最后一句话:

    z[i]=x[i].replaceAll("S","A");
    
    z[i]=x[i].replaceAll("E","S");
    
    z[i]=x[i].replaceAll("A","E");
    
    您将再次覆盖
    z[i]
    中以前的更改

    因此,如果原始字符串是
    SEES
    ,那么最后一行将把所有
    A
    s替换为
    E
    s,因为
    SEES
    中没有
    A
    ,所以字符串保持不变。

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

    您可以使用下面的程序中的单个数组来实现这一点

    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));
      }
    }
    

    不确定你想做什么,但是<代码> Z[i]=x[i]。RePoTALL(“a”,“e”)是最后一个,击败所有的组合。注意,如果在你的字符串中没有<代码> < /代码>,它只会正常工作。甚至是
    '\0'
    '\377'
    作为
    'S'
    的临时替代品,以避免意外地将“real”
    'A'
    S变成
    'E'
    S。