Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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_Regex_String_Replace - Fatal编程技术网

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

Java 需要解释使用字符串缓冲区替换字符串的代码吗,java,regex,string,replace,Java,Regex,String,Replace,我从网站上获得了以下代码。但我不能清楚地理解它。有人能帮我理解代码吗。代码将替换字符串。它用替换字符串替换stringToReplace。它正在进行角色替换,但我无法理解它的细节 String strIn = "Al%arm %Receipient Number% has arrived %test% is ok."; String stringToReplace = "%Receipient Number%"; String replacementString = "12345"; Stri

我从网站上获得了以下代码。但我不能清楚地理解它。有人能帮我理解代码吗。代码将替换字符串。它用替换字符串替换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.

首先,您有输入字符串
strIn
,然后是要替换的
stringToReplace
和替换字符串
replacementString
<顺便说一下,code>ReplacedString应该是
ReplacedString
不符合惯例的

查找要替换为
lastIndexOf
的字符串的最后一个匹配项。这将提供最后一个索引,替换字符串从原始字符串开始

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

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


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

理解代码的最佳方法是实际调试或进行一次试运行。 我的意思是,在调试器中实际查看输出值,以查看特定行在做什么

在您的情况下,这样做的方法是首先检查每一行的功能。 那么字符串中的lastIndexOf做什么呢?你认为为什么会有一个-1的检查,所以阅读文档会告诉你为什么会发生这种情况

下一步,替换并再次阅读文档,了解其参数以及您要发送的内容

在任何情况下,上面的代码都是以复杂的方式完成一些非常简单的事情

strIn = strIn.replaceAll(stringToReplace, replacementString)

现在的情况是有人重新发明了轮子。用这条线可以完成整个过程:

String ReplacedString = strIn.replace(stringToReplace, replacementString);
尝试编写自己版本的
replace()
方法没有任何好处


相反,也有相当大的缺点-您询问的事实证明这很难阅读,因此容易出现错误。

请检查此处使用的每种方法的文档,例如
replace
lastIndexOf
。这会让你了解它们是如何工作的,你可以更好地理解在那之后做了什么。