2016-10-11 2 views
1

저는 텍스트 편집기로 작업 중이며 사용자가 원하는 단어를 찾아서 바꿀 수 있기를 바랍니다. 나는 현재 단어를 대체 할 코드가 있지만 단어의 모든 항목을 한 번에 바꿉니다. 사실 한 번 발생했던 단어를 대체하고 싶습니다. 예를 들어 사용자가 "cat"을 "dog"로 바꾸려면 버튼을 클릭해야하며 찾은 첫 번째 "cat"이 바뀌고 다른 하나를 바꾸려면 버튼을 다시 클릭해야합니다 한 번에 하나씩 나타납니다. 나는 여기에있는 몇 가지 질문을 살펴 봤지만, 대부분은 모든 사건을 즉시 대체하는 것처럼 보이고 그것이 내가 가진 문제이다. 이것은 내가 지금까지 가지고있는 것이다. 나를 도울 수있는 사람에게 미리 감사드립니다.자바에서 단어를 한 번에 하나씩 찾고 바꾸려면 어떻게합니까?

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

관련 문제