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