Проблема кода Java: поиск и замена - PullRequest
1 голос
/ 03 сентября 2011

Возник вопрос: как мне найти в Java все слова в текстах, например, 4 символа? а потом как их заменить?

для поиска некоторого фрагмента текста, который я написал

<</p>

fButton.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent event)
{int i=text.getText().indexOf(field2.getText(),text.getSelectionStart());
if(i>=0)
text.select(i,i+field2.getText().length());
text.requestFocusInWindow()

;>

Я пытался объединить кнопки и поля, но у меня есть только 2 ошибки:

symbol  : method parseInt (javax.swing.JTextField)
location: class java.lang.Integer
numb=Integer.parseInt(field2);
            ^
symbol  : method replaceAll (java.lang.String,javax.swing.JTextField)
location: class javax.swing.JTextArea
text = text.replaceAll("\\b\\w{4}\\b", field3);
           ^

Код:

 field2=new JTextField("Enter number",10);
    int numb;
    numb=Integer.parseInt(field2);
    tPanel.add(field2);
    JButton fButton=new JButton ("Find and Replace");
    tPanel.add(fButton);
    fButton.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    text = text.replaceAll("\\b\\w{4}\\b", field3);
    }});
    field3=new JTextField("Enter replace",10);
    tPanel.add(field3);

Не могу понять это (((

1 Ответ

4 голосов
/ 03 сентября 2011

Вы написали "символы" в своем вопросе. Я буду понимать это как «слово персонажей». Если вам нужно другое определение, посмотрите сводку регулярных выражений в Pattern api .

Используйте String.replaceAll(regularExpression, replacementText), а используемое регулярное выражение - "\b\w{4}\b".

  • \b - это «граница слова»
  • \w - это "символы слова"
  • {4} - это сколько символов «до» для сопоставления (в данном случае символов слова)

Таким образом, чтобы заменить все 4-буквенные слова в строке text do (обратите внимание, что все \ экранированы другим \):

text = text.replaceAll("\\b\\w{4}\\b", "replaced");

Например:

System.out.println("bla blaa hello test".replaceAll("\\b\\w{4}\\b", "mupp"));

Выходы:

bla mupp hello mupp

Чтобы ответить на ваш обновленный вопрос:

Код ниже произвел этот скриншот:

screenshot

Код:

public static void main(String[] args) {

    final JTextArea area = new JTextArea("bla blaa hello test");
    final JTextField numberField  = new JTextField("4", 10);
    final JTextField replaceField = new JTextField("muff", 10);

    JButton button = new JButton(new AbstractAction("Replace") {
        public void actionPerformed(ActionEvent event) {
            String text = area.getText();
            int    syms = Integer.parseInt(numberField.getText());
            String repl = replaceField.getText();

            area.setText(text.replaceAll("\\b\\w{"+syms+"}\\b", repl));
        }
    });

    JPanel panel = new JPanel();
    panel.add(numberField);
    panel.add(replaceField);
    panel.add(button);

    JFrame frame = new JFrame("Test");
    frame.add(area, BorderLayout.CENTER);
    frame.add(panel, BorderLayout.NORTH);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...