| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
9年前发布

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() && 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();          }      }  }