java Swing实现的正则表达式测试工具,,如下代码:package
分享于 点击 26305 次 点评:269
java Swing实现的正则表达式测试工具,,如下代码:package
如下代码:
package cn.outofmemory.snippets.core;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(); } }}
用户点评