我在我的文本编辑器中尝试过这个代码来查找和替换按钮,但是没有用。
public void actionPerformed(ActionEvent ae)
{
String findwhat = new String("");
String replacewith = new String("");
String text = ta.getText();
findwhat = textField1.getText();
ln = findwhat.length();
replacewith = textField2.getText();
if (ae.getSource() == findButton)
{
startindex = text.indexOf(findwhat, i);
ta.select(startindex, startindex + ln);
i = startindex + ln;
}
else if (ae.getSource() == replace)
{
ta.replaceRange(replacewith, startindex, startindex + ln);
}
else if (ae.getSource() == replaceall)
{
while (startindex + ln != -1)
{
startindex = text.indexOf(findwhat, i);
ta.replaceRange(replacewith, startindex, startindex + ln);
}
}
}
有人可以帮帮我吗?
答案 0 :(得分:0)
您的循环使用的变量i
似乎没有在您发布的代码中定义。但那既不在这里,也不在那里。主要问题是条件startIndex+ln != -1
不是测试循环终止的适当条件。您还有另一个问题:如果查找和替换文本具有不同的长度,则每次要替换的偏移量不会是startindex
。试试这个循环(未经测试):
startIndex = text.indexOf(findwhat);
int delta = replacewith.length() - ln;
int deltaOffset = 0;
while(startindex != -1) {
ta.replaceRange(replacewith, startindex+deltaOffset, startindex+deltaOffset+ln);
deltaOffset += delta;
startindex = text.indexOf(findwhat, startindex + ln);
}
您还应拒绝"查找并替换"或者"替换所有"请求findtext
为空的请求。
答案 1 :(得分:0)
我相信如果你有一个无限循环,你的问题将归结为这个循环:
while (startindex + ln != -1)
{
startindex = text.indexOf(findwhat, i);
ta.replaceRange(replacewith, startindex, startindex + ln);
}
您的代码正在检查以下条件:
while (startindex + ln != -1)
这种情况没有多大意义,因为它说:
while the sum of my current start index and the length of the string I
am searching for does not equal -1, continue searching.
您在while循环中更新startindex
,但我认为它不会小于0.即使将其设置为0
或-1
,您{{1} 1}}变量永远不会更新,永远是ln
所以这将永远是真的,你永远不会脱离循环。
检查每个值独立于另一个值更有意义。
也许你需要的条件是:
> -1
那说:
while (startindex != -1 && ln > 0)