2016-10-11 4 views
1

私はテキストエディタで作業しており、ユーザが選択した単語を見つけて置き換えることができるようにします。私は現在、単語を置き換えるコードを持っていますが、単語のすべての出現を一度に置き換えます。私は実際に一度発生した単語をその時に置き換えたいと思う。例えば、 "cat"を "dog"に置き換えたい場合、ボタンをクリックする必要があり、見つかった最初の "cat"が置き換えられ、ユーザはもう一度ボタンをクリックする必要があります一度に1つずつ出現する。私はここでいくつかの質問を見てきましたが、それらの大部分はすべての出来事を一度に置き換えているように見えます。それが私の問題です。これはこれまで私が持っていたものです。私を助けることができる誰かに事前に感謝します。Javaで一度に1つのオカレンスを見つけて置き換えるにはどうすればよいですか?

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

ifとそのwhileを交換。

あなたのループには、「もっと多くのオカレンスが見つかるかぎり、置き換えられる」と表示されます。あなたが最初のオカレンスだけを置き換えたいのであれば、おそらく "オカレンスを見つけたら、置き換える"でしょう。

「置き換える」ボタンの名前を「すべて置換」に変更することもできます。

+0

もちろん、それは簡単なことでしょう。私はそれについても考えなかった。どうもありがとうございます。これは、replaceFirstメソッドを使わなくても全体の問題を確実に修正しました。ありがとう! – Jay

関連する問題