错误"查找和替换文本"文本编辑器中的按钮

时间:2014-09-29 17:40:07

标签: java

我在我的文本编辑器中尝试过这个代码来查找和替换按钮,但是没有用。

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

有人可以帮帮我吗?

2 个答案:

答案 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)