Java 小例子:一个测试正则表达式的工具

本文介绍了一个用于测试Java正则表达式的图形界面工具,该工具能够帮助开发者快速验证正则表达式的正确性,并通过高亮显示匹配部分增强用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一个例子,也是一个工具,用来测试指定的文本中是否包含指定的正则表达式匹配。

截图

Code:
  1. import javax.swing.*;  
  2. import javax.swing.text.DefaultHighlighter;  
  3. import javax.swing.text.BadLocationException;  
  4. import java.awt.BorderLayout;  
  5. import java.awt.Font;  
  6. import java.awt.HeadlessException;  
  7. import java.awt.Color;  
  8. import java.awt.event.ActionEvent;  
  9. import java.awt.event.ActionListener;  
  10. import java.util.regex.Pattern;  
  11. import java.util.regex.Matcher;  
  12.    
  13. /** 
  14.  * 测试 Java 正则表达式 
  15.  */  
  16. public class RegTester {  
  17.    
  18.     public static void main(String[] args) {  
  19.         try {  
  20.             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());  
  21.         } catch (Exception e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.    
  25.         new RegTesterFrame().setVisible(true);  
  26.     }  
  27. }  
  28.    
  29. class RegTesterFrame extends JFrame {  
  30.    
  31.     private JTextField textbox = new JTextField();  // 包含测试文本的文本域  
  32.        
  33.     private JTextArea textarea = new JTextArea();   // 包含正则表达式的文本框  
  34.    
  35.     private RegTesterFrame thisFrame = this;  
  36.        
  37.     private DefaultHighlighter.DefaultHighlightPainter highlightPainter =  
  38.             new DefaultHighlighter.DefaultHighlightPainter(Color.green);  
  39.    
  40.     // 构造方法  
  41.     RegTesterFrame() throws HeadlessException {  
  42.         super("测试 Java 正则表达式");  
  43.         setSize(500300);  
  44.         setLocation(300100);  
  45.         setDefaultCloseOperation(EXIT_ON_CLOSE);  
  46.    
  47.         setupComponents();  
  48.     }  
  49.    
  50.     // 初始化控件  
  51.     private void setupComponents() {  
  52.         setupBorder();  
  53.    
  54.         JPanel topPanel = new JPanel(new BorderLayout(50));  
  55.         this.add(topPanel, BorderLayout.NORTH);  
  56.         setupTopPanel(topPanel);  
  57.    
  58.         JPanel centerPanel = new JPanel(new BorderLayout());  
  59.         this.add(centerPanel, BorderLayout.CENTER);  
  60.         setupCenterPanel(centerPanel);  
  61.     }  
  62.    
  63.     // 给窗体面板加上边框  
  64.     private void setupBorder() {  
  65.         JPanel panel = new JPanel(new BorderLayout(55));  
  66.         panel.setBorder(BorderFactory.createEmptyBorder(5555));  
  67.         this.setContentPane(panel);  
  68.     }  
  69.    
  70.     // 文本域面板  
  71.     private void setupCenterPanel(JPanel panel) {  
  72.         textarea.setFont(new Font(Font.DIALOG_INPUT, 012));  
  73.         panel.add(new JScrollPane(textarea));  
  74.     }  
  75.    
  76.     // 上方面板  
  77.     private void setupTopPanel(JPanel panel) {  
  78.         textbox.setFont(new Font(Font.DIALOG_INPUT, 012));  
  79.         panel.add(textbox, BorderLayout.CENTER);  
  80.    
  81.         JButton button = new JButton("测试");  
  82.         button.addActionListener(new ActionListener() {  
  83.             public void actionPerformed(ActionEvent e) {  
  84.                 checkRegularExpression();  
  85.             }  
  86.         });  
  87.         panel.add(button, BorderLayout.EAST);  
  88.         panel.add(new JLabel("正则表达式:"), BorderLayout.WEST);  
  89.     }  
  90.    
  91.     // 检查正则表达式  
  92.     private void checkRegularExpression() {  
  93.         textarea.getHighlighter().removeAllHighlights();  
  94.    
  95.         String reg = textbox.getText();  
  96.         String text = textarea.getText();  
  97.    
  98.         Pattern p = Pattern.compile(reg);  
  99.         Matcher m = p.matcher(text);  
  100.         if (m.find()) {  
  101.             thisFrame.setTitle("文本符合表达式。");  
  102.             highlightMatches(m);  
  103.         } else {  
  104.             thisFrame.setTitle("文本不符合表达式。");  
  105.         }  
  106.     }  
  107.    
  108.     // 将符合正则表达式的部分高亮显示  
  109.     private void highlightMatches(Matcher m) {  
  110.         highlight(m);  
  111.         int start = m.end();  
  112.         while (m.find(start)) {  
  113.             highlight(m);  
  114.             start = m.end();  
  115.         }  
  116.     }  
  117.    
  118.     private void highlight(Matcher m) {  
  119.         try {  
  120.             textarea.getHighlighter().addHighlight(m.start(), m.end(), highlightPainter);  
  121.         } catch (BadLocationException e) {  
  122.             e.printStackTrace();  
  123.         }  
  124.     }  
  125. }  

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值