java Swing实现的正则表达式测试工具

2021-10-27 15:39:22 浏览数 (2)

代码语言:javascript复制
import java.awt.GridLayout;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
/**

Standalone Swing GUI application for demonstrating REs. <br/>TODO: Show the
entire match, and $1 and up as captures that matched.
*/

public class GuiDemo extends JPanel {

protected Pattern pattern;
protected Matcher m;
protected JTextField pattTF, strTF;
protected JCheckBox compiledOK;
protected JRadioButton match, find, findAll;
protected JTextField mTF;

/**
 * "main program" method - construct and show
 */
public static void main(String[] av) {

    JFrame f = new JFrame("GuiDemo");

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    GuiDemo comp = new GuiDemo();
    f.setContentPane(comp);
    f.pack();
    f.setLocation(200, 200);
    f.setVisible(true);
}

/**
 * Construct the REDemo object including its GUI
 */
public GuiDemo() {
    super();

    JPanel top = new JPanel();
    top.add(new JLabel("Pattern:", JLabel.RIGHT));
    pattTF = new JTextField(20);
    pattTF.getDocument().addDocumentListener(new PattListener());
    top.add(pattTF);
    top.add(new JLabel("Syntax OK?"));
    compiledOK = new JCheckBox();
    top.add(compiledOK);

    ChangeListener cl = new ChangeListener() {

        @Override
        public void stateChanged(ChangeEvent ce) {
            tryToMatch();
        }
    };

    JPanel switchPane = new JPanel();
    ButtonGroup bg = new ButtonGroup();
    match = new JRadioButton("Match");
    match.setSelected(true);
    match.addChangeListener(cl);
    bg.add(match);
    switchPane.add(match);
    find = new JRadioButton("Find");
    find.addChangeListener(cl);
    bg.add(find);
    switchPane.add(find);
    findAll = new JRadioButton("Find All");
    findAll.addChangeListener(cl);
    bg.add(findAll);
    switchPane.add(findAll);

    JPanel strPane = new JPanel();
    strPane.add(new JLabel("String:", JLabel.RIGHT));
    strTF = new JTextField(20);
    strTF.getDocument().addDocumentListener(new StrListener());
    strPane.add(strTF);
    strPane.add(new JLabel("Matches:"));
    mTF = new JTextField(3);
    strPane.add(mTF);

    setLayout(new GridLayout(0, 1, 5, 5));
    add(top);
    add(strPane);
    add(switchPane);
}

protected void setMatch(boolean b) {
    if (b) {
        mTF.setText("Yes");
    } else {
        mTF.setText("No");
    }
}

protected void setMatch(int n) {
    mTF.setText(Integer.toString(n));
}

protected void tryToCompile() {
    pattern = null;
    try {
        pattern = Pattern.compile(pattTF.getText());
        m = pattern.matcher("");
        compiledOK.setSelected(true);
    } catch (PatternSyntaxException ex) {
        compiledOK.setSelected(false);
    }
}

protected boolean tryToMatch() {
    if (pattern == null) {
        return false;
    }
    m.reset(strTF.getText());
    if (match.isSelected() && m.matches()) {
        setMatch(true);
        return true;
    }
    if (find.isSelected() && m.find()) {
        setMatch(true);
        return true;
    }
    if (findAll.isSelected()) {
        int i = 0;
        while (m.find()) {
              i;
        }
        if (i > 0) {
            setMatch(i);
            return true;
        }
    }
    setMatch(false);
    return false;
}

/**
 * Any change to the pattern tries to compile the result.
 */
class PattListener implements DocumentListener {

    @Override
    public void changedUpdate(DocumentEvent ev) {
        tryToCompile();
    }

    @Override
    public void insertUpdate(DocumentEvent ev) {
        tryToCompile();
    }

    @Override
    public void removeUpdate(DocumentEvent ev) {
        tryToCompile();
    }
}

/**
 * Any change to the input string tries to match the result
 */
class StrListener implements DocumentListener {

    @Override
    public void changedUpdate(DocumentEvent ev) {
        tryToMatch();
    }

    @Override
    public void insertUpdate(DocumentEvent ev) {
        tryToMatch();
    }

    @Override
    public void removeUpdate(DocumentEvent ev) {
        tryToMatch();
    }
}
 
}</pre> 

0 人点赞