返回顶部

收藏

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

更多
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() &amp;&amp; m.matches()) {
            setMatch(true);
            return true;
        }
        if (find.isSelected() &amp;&amp; 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();
        }
    }
}

标签:java

收藏

0人收藏

支持

0

反对

0

发表评论