用java写的正则表达式练习器.

来源:互联网 发布:java对象是什么意思 编辑:程序博客网 时间:2024/05/22 03:43
  可能有人会说现在网上到处都是正则表达式的练习器,我也见过不少,有用html和javascript写的hta应用程序的,也有用C#写的,但是这个用java写的练习器当然是与java有关的哦.里面肯定有源字符串(str)和正则表达式(regex)的输入,只不过输出与其它不一样,输出的是
  • str.split(regex)的结果.
  • str.match(regex)的结果.
  • 当然还有输出java.util.regex包里的一些使用结果.一般来说对用java的,练习正则有用吧,如果你对java.util.regex不怎么了解,这个代码可能会有点帮助.任何不懂的回复问我就是.
      源代码如下:

    import javax.swing.*;

    import java.awt.*;
    import java.awt.event.*;
    import java.util.regex.*;

    public class RegTest extends JFrame implements ActionListener{

    /**
    * @author hoverlees(好棒)
    */
    JTextField src=null;
    JTextField reg=null;
    JLabel match=null;
    JButton ok=new JButton("确定");
    Box b=null;
    JLabel result=new JLabel(" ");
    JLabel la1=new JLabel();
    JLabel la2=new JLabel();

    ///////////java.util.regex
    Pattern p=null;

    public RegTest(){
    super("java正则表达式练习");

    src=new JTextField("hoverlees@yahoo.com.cn 好棒e");
    reg=new JTextField("//De");
    match=new JLabel(" ");
    b=Box.createVerticalBox();
    Box b1=Box.createHorizontalBox();
    b1.add(new JLabel(" 源字符串(str):"));
    b1.add(src);
    b1.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    b.add(b1);
    Box b2=Box.createHorizontalBox();
    b2.add(new JLabel("正则表达式(reg):"));
    b2.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    b2.add(reg);
    b.add(b2);
    Box b3=Box.createHorizontalBox();
    b3.add(match);

    JLabel jl2=new JLabel("str.match(reg)完全匹配情况:");
    addBox(jl2,match);
    addBox(new JLabel("str.split(reg)结果('|'分隔):"),result);
    addBox(new JLabel("包含部分匹配情况:"),la1);
    addBox(new JLabel("所有部分匹配('|'分隔):"),la2);
    Box b5=Box.createHorizontalBox();
    b5.add(ok);
    b.add(b5);
    ok.addActionListener(this);
    this.getContentPane().add(b);
    this.setDefaultCloseOperation(3);
    this.pack();
    this.setSize(600,this.getHeight());
    this.getRootPane().setDefaultButton(ok);
    }
    private void addBox(JComponent o1,JComponent o2){
    Box temp=Box.createHorizontalBox();
    temp.add(o1);
    if(o2!=null) temp.add(o2);
    temp.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    b.add(temp);
    temp.add(Box.createHorizontalGlue());
    }
    public void actionPerformed(ActionEvent e){
    match.setText(src.getText().matches(reg.getText()) ? "true":"false");
    String[] str=src.getText().split(reg.getText());
    StringBuilder sb=new StringBuilder();
    for(int i=0;i<str.length;i++){
    sb.append(str[i]);
    if(i!=str.length-1) sb.append("|");
    }
    result.setText(sb.toString());
    p=Pattern.compile(reg.getText());
    Matcher m=p.matcher(src.getText());
    la1.setText(m.find() ? "true":"false");
    StringBuilder sb2=new StringBuilder();
    sb2.append(m.group());
    while(m.find()){
    sb2.append("|");
    sb2.append(m.group());
    }
    la2.setText(sb2.toString());
    }
    public static void main(String[] args) {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (UnsupportedLookAndFeelException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    new RegTest().setVisible(true);
    }

    }