Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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 替换功能不符合预期结果_Java_Replace - Fatal编程技术网

Java 替换功能不符合预期结果

Java 替换功能不符合预期结果,java,replace,Java,Replace,以下是我的代码: char c; Random Generator = new Random(); String text = FormulaArea.getText(); String latestEqn = ""; for(c='a'; c<='z';c++) { int randomNumber = Generator.nextInt(10000); String convertToString = String.valueOf(randomNumb

以下是我的代码:

char c;  
Random Generator = new Random();  
String text = FormulaArea.getText();  
String latestEqn = "";

for(c='a'; c<='z';c++)  
{  
  int randomNumber = Generator.nextInt(10000);  
  String convertToString = String.valueOf(randomNumber);  
  String sequence = String.valueOf(c);

  latestEqn = text.replaceAll(sequence,convertString);  
} 

TextField1.setText(latestEqn):  
但实际结果给我的结果是:

Initial : a*b  
Result  : a*b

我怀疑出了什么问题,因为编译器没有显示任何错误。

这是因为您放弃了以前循环迭代中的最新版本。以下是您可以修复它的方法:

String latestEqn = text;
for(c='a'; c<='z';c++)
{  
  int randomNumber = Generator.nextInt(10000);  
  String convertToString = String.valueOf(randomNumber);  
  String sequence = String.valueOf(c);
  latestEqn = latestEqn.replaceAll(sequence,convertString);  
} 

因为代码总是从原始文本开始,所以只有当文本包含字母z时,才会看到效果。例如,x*z将产生x*1000或其他一些随机数。

替换文本字符串中的变量并将结果保存在latestEqn中,但下一次迭代将再次替换编辑的值。只需去掉latestEqn变量:

String text = "a*b";

for (c = 'a'; c <= 'z'; c++) {
    int randomNumber = Generator.nextInt(10000);
    String convertToString = String.valueOf(randomNumber);
    String sequence = String.valueOf(c);
    text = text.replaceAll(sequence, convertToString);
}

如果这样做,那么原始文本将被丢弃。我怀疑添加latestEqn变量的原因是为了能够在以后打印原始版本和替换版本。因此,我认为@dasblinkenlight的答案更好,因为原版仍然可以使用FormulaArea.getText,所以不会丢弃任何东西。
String text = "a*b";

for (c = 'a'; c <= 'z'; c++) {
    int randomNumber = Generator.nextInt(10000);
    String convertToString = String.valueOf(randomNumber);
    String sequence = String.valueOf(c);
    text = text.replaceAll(sequence, convertToString);
}