java正则表达式测试工具_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.
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();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值