我从网站上获得了以下代码。但我无法理解它。任何人都可以帮我理解代码。代码替换字符串。它用替换字符串替换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.
答案 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()
方法版本没有任何优势。
相反,存在相当大的缺点 - 您正在询问的事实是证明这很难阅读,因此容易出错。