2016-10-11 139 views
1

我正在使用文本編輯器,我希望用戶能夠找到並替換他們選擇的單詞。我目前有代碼來替換這個詞,但它一次代替了這個詞的所有出現。我實際上想在這個時候替換一次。例如,如果用戶想用「狗」代替「貓」,他們將不得不點擊一個按鈕,它將代替它找到的第一個「貓」,然後用戶將不得不再次單擊該按鈕來替換其他一次一個。我在這裏查看了一些問題,但其中大部分似乎都是一次性替換所有事件,這就是我所遇到的問題。這是我迄今爲止所擁有的。在此先感謝任何能夠幫助我的人。如何在java中一次查找並替換一個單詞?

class Bottom extends JPanel 
{ 
    private JPanel bottomPanel = new JPanel(); 
    private JButton replaceButton = new JButton("Replace"); 
    private JTextField textField = new JTextField("", 15);; 
    private JLabel label = new JLabel(" with "); 
    private JTextField textField2 = new JTextField("", 15); 

    public Bottom() 
    { 
    bottomPanel.add(replaceButton); 
    bottomPanel.add(textField); 
    bottomPanel.add(label); 
    bottomPanel.add(textField2); 
    add(bottomPanel); 

    replaceButton.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      try{ 
      String findText = textField.getText(); 
      int findTextLength = findText.length(); 
      String replaceText = textField2.getText(); 
      int replaceTextLength = replaceText.length(); 
      Document doc = textArea.getDocument(); 
      String text = doc.getText(0, doc.getLength()); 
      int counter = 0; 
      int lengthOffset = 0; 

      while ((lengthOffset = text.indexOf(findText, lengthOffset)) != -1) 
      { 
       int replaceOffset = lengthOffset + ((replaceTextLength - findTextLength) * counter); 
       textArea.select(replaceOffset, replaceOffset + findTextLength); 
       textArea.replaceSelection(replaceText); 

       lengthOffset += replaceTextLength; 

       counter++; 
      } 
      }catch(BadLocationException b){b.printStackTrace();} 
     } 
    }); 
} 

}

回答

1

替換whileif

你的循環說「只要你發現更多的事件,不斷更換」。如果您希望它僅替換第一個匹配項,那麼它可能應該是「如果您發現某個事件,請替換」。

另一種解決方案可能是將您的「替換」按鈕重命名爲「全部替換」;-)

+0

當然,它會是如此簡單。我甚至沒有想到這一點。非常感謝。這絕對解決了整個問題,而無需使用replaceFirst方法。謝謝! – Jay

相關問題