需要使用String缓冲区解释字符串替换代码

时间:2014-04-22 05:59:56

标签: java regex string replace

我从网站上获得了以下代码。但我无法理解它。任何人都可以帮我理解代码。代码替换字符串。它用替换字符串替换stringToReplace。它正在进行角色替换,但我无法理解其细节。

String strIn = "Al%arm %Receipient Number% has arrived %test% is ok.";
String stringToReplace = "%Receipient Number%";
String replacementString  = "12345";
String ReplacedString = null;

int idx = strIn.lastIndexOf( stringToReplace );
if ( idx != -1 ) 
{
  StringBuffer results = new StringBuffer( strIn );
  results.replace( idx, idx+stringToReplace.length(), replacementString );
  while( (idx=strIn.lastIndexOf(stringToReplace, idx-1)) != -1 ) 
  {
    results.replace( idx, idx+stringToReplace.length(), replacementString );
  }
  //System.out.println(results.toString());
  ReplacedString = results.toString();
}
System.out.println(ReplacedString);

输出

Al%arm 12345 has arrived %test% is ok.

3 个答案:

答案 0 :(得分:0)

首先,您有输入字符串strIn,然后是要替换的stringToReplace和替换字符串replacementString。顺便说一下,ReplacedString应该replacedString超出惯例。

您要查找要替换为lastIndexOf的字符串的最后一次出现。这将为您提供最后一个索引,替换字符串在原始字符串中开始。

如果找到要替换的字符串(如果索引不是-1),则使用StringBuffer方法replace将字符串从idx替换为idx+stringToReplace.length() (要从找到的索引开始替换整个长度的字符串)。

然后检查要替换的字符串是否仍然存在于结果中,当它确实存在时,替换它。

然后将结果字符串化(StringBuffer)并输出。

答案 1 :(得分:0)

理解代码的最佳方法是实际调试或干运行。 我的意思是实际上看到调试器中的输出值以查看特定线路的作用。

在你的情况下,首先要检查每一行的作用。 那么字符串中的lastIndexOf是做什么的呢?为什么你认为有一个-1的检查所以阅读文档会激动地告诉你为什么会发生这种情况。

接下来再次更换并阅读文档,了解其参数是什么以及您发送的是什么。

在任何情况下,上面的代码都是复杂的做事非常简单的方式

strIn = strIn.replaceAll(stringToReplace, replacementString)

答案 2 :(得分:0)

正在发生的事情是有人重新发明了轮子。整个过程可以通过以下方式完成:

String ReplacedString = strIn.replace(stringToReplace, replacementString);

尝试编写自己的replace()方法版本没有任何优势。

相反,存在相当大的缺点 - 您正在询问的事实是证明这很难阅读,因此容易出错。