美文网首页
JAVA 正则表达式匹配器

JAVA 正则表达式匹配器

作者: Jarhot | 来源:发表于2017-07-18 11:33 被阅读0次
    import javax.swing.*;     
    import javax.swing.text.DefaultHighlighter;     
    import javax.swing.text.BadLocationException;     
    import java.awt.BorderLayout;     
    import java.awt.Font;     
    import java.awt.HeadlessException;     
    import java.awt.Color;     
    import java.awt.event.ActionEvent;     
    import java.awt.event.ActionListener;     
    import java.util.regex.Pattern;     
    import java.util.regex.Matcher;     
          
    /**   
     * 测试 Java 正则表达式   
     */     
    public class RegTester {     
          
        public static void main(String[] args) {     
            try {     
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());     
            } catch (Exception e) {     
                e.printStackTrace();     
            }     
          
            new RegTesterFrame().setVisible(true);     
        }     
    }     
          
    class RegTesterFrame extends JFrame {     
          
        private JTextField textbox = new JTextField();  // 包含测试文本的文本域     
              
        private JTextArea textarea = new JTextArea();   // 包含正则表达式的文本框     
          
        private RegTesterFrame thisFrame = this;     
              
        private DefaultHighlighter.DefaultHighlightPainter highlightPainter =     
                new DefaultHighlighter.DefaultHighlightPainter(Color.green);     
          
        // 构造方法     
        RegTesterFrame() throws HeadlessException {     
            super("测试 Java 正则表达式");     
            setSize(500, 300);     
            setLocation(300, 100);     
            setDefaultCloseOperation(EXIT_ON_CLOSE);     
          
            setupComponents();     
        }     
          
        // 初始化控件     
        private void setupComponents() {     
            setupBorder();     
          
            JPanel topPanel = new JPanel(new BorderLayout(5, 0));     
            this.add(topPanel, BorderLayout.NORTH);     
            setupTopPanel(topPanel);     
          
            JPanel centerPanel = new JPanel(new BorderLayout());     
            this.add(centerPanel, BorderLayout.CENTER);     
            setupCenterPanel(centerPanel);     
        }     
          
        // 给窗体面板加上边框     
        private void setupBorder() {     
            JPanel panel = new JPanel(new BorderLayout(5, 5));     
            panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));     
            this.setContentPane(panel);     
        }     
          
        // 文本域面板     
        private void setupCenterPanel(JPanel panel) {     
            textarea.setFont(new Font(Font.DIALOG_INPUT, 0, 12));     
            panel.add(new JScrollPane(textarea));     
        }     
          
        // 上方面板     
        private void setupTopPanel(JPanel panel) {     
            textbox.setFont(new Font(Font.DIALOG_INPUT, 0, 12));     
            panel.add(textbox, BorderLayout.CENTER);     
          
            JButton button = new JButton("测试");     
            button.addActionListener(new ActionListener() {     
                public void actionPerformed(ActionEvent e) {     
                    checkRegularExpression();     
                }     
            });     
            panel.add(button, BorderLayout.EAST);     
            panel.add(new JLabel("正则表达式:"), BorderLayout.WEST);     
        }     
          
        // 检查正则表达式     
        private void checkRegularExpression() {     
            textarea.getHighlighter().removeAllHighlights();     
          
            String reg = textbox.getText();     
            String text = textarea.getText();     
          
            Pattern p = Pattern.compile(reg);     
            Matcher m = p.matcher(text);     
            if (m.find()) {     
                thisFrame.setTitle("文本符合表达式。");     
                highlightMatches(m);     
            } else {     
                thisFrame.setTitle("文本不符合表达式。");     
            }     
        }     
          
        // 将符合正则表达式的部分高亮显示     
        private void highlightMatches(Matcher m) {     
            highlight(m);     
            int start = m.end();     
            while (m.find(start)) {     
                highlight(m);     
                start = m.end();     
            }     
        }     
          
        private void highlight(Matcher m) {     
            try {     
                textarea.getHighlighter().addHighlight(m.start(), m.end(), highlightPainter);     
            } catch (BadLocationException e) {     
                e.printStackTrace();     
            }     
        }     
    }   
    

    相关文章

      网友评论

          本文标题:JAVA 正则表达式匹配器

          本文链接:https://www.haomeiwen.com/subject/tdnckxtx.html