2014-09-29 54 views
-3

我試過這種編碼,在我的文本編輯器中查找和替換按鈕,但無法正常工作。文本編輯器中的「查找並替換文本」按鈕中的錯誤

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

_ 「不工作」 _是非常模糊的。它以什麼方式不起作用?它是否會拋出異常?當它應該做什麼時什麼也不做?做錯了什麼?還有別的嗎? – 2014-09-29 17:42:22

+0

你是什麼意思,「它不工作」?這段代碼做了什麼?你的[MCVE](http://stackoverflow.com/help/mcve)在哪裏? – 2014-09-29 17:42:25

+0

你需要解釋什麼是不工作。你期望它做什麼,爲什麼?它實際上做的是什麼 – 2014-09-29 17:42:46

回答

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是空的。

0

我相信你的問題將歸結到這個while循環,如果你有一個無限循環:

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. 

您更新startindex在while循環中,但我認爲它不會小於0.即使它設置爲0-1,那麼您的ln變量永遠不會更新,並且始終爲> -1,所以這將永遠是真實的,您永遠不會跳出循環。

檢查每個獨立於另一個的值是更有意義的。

也許你需要的條件是:

while (startindex != -1 && ln > 0) 

,上面寫着:

while I have a startindex to look from (startindex != -1) 
AND 
the string I am looking for is not empty (ln > 0), 
continue to look for the string.