前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java Swing实现的正则表达式测试工具

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

原创
作者头像
大师级码师
修改2021-10-27 15:39:22
3820
修改2021-10-27 15:39:22
举报
文章被收录于专栏:大师级码师大师级码师
代码语言: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> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档