替换功能不符合预期结果

时间:2013-12-26 14:12:07

标签: 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(randomNumber);  
  String sequence = String.valueOf(c);

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

TextField1.setText(latestEqn):  

根据上面的代码,我的预期结果是:

Initial : a*b  
Result  : 100* 200 

但实际结果给了我结果:

Initial : a*b  
Result  : a*b

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

2 个答案:

答案 0 :(得分:7)

这是因为您从先前的循环迭代中丢弃latestEqn。以下是解决问题的方法:

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

由于您的代码始终从原始文本开始,因此仅当text包含字母z时才会看到效果。例如,x*z会产生x*1000(或其他一些随机数)。

答案 1 :(得分:1)

您替换text字符串中的变量并将结果保存在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);
}