java Swing工具 正则表达解析器

     因为项目需求,在条码解析中,需要获取在数据库中配置好的格式规则,主要就是解析规则,然后在新的条码进来后,DBA需要把对应的规则配置上去,但是DBA不知道该条码在此种规则下解析出来的数据是什么,然后就找程序员给解析。多次处理好,决定写一个小工具个给DBA,让他自己操作。同时也好久没有碰过Swing了,个人还是蛮喜欢Swing类库的。代码其实简单,写一个main方法,然后导出jar包,最后转成exe可执行程序。

1 界面

2 代码

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        show();
    }

    private static void show() {
        JFrame.setDefaultLookAndFeelDecorated(true);

        // 创建及设置窗口
        final JFrame frame = new JFrame("条码解析测试");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600,400);
        frame.setLayout(new BorderLayout());


        JPanel panel = new JPanel ();
        panel.setLayout(new GridLayout(4,1));
        frame.add(panel);

        JPanel panel1 = new JPanel();
        JLabel userLabel = new JLabel("正则表达式:");
        userLabel.setBounds(10,20,80,25);
        panel1.add(userLabel);
        final JTextField userText = new JTextField(20);
        userText.setBounds(100,20,165,25);

        panel1.add(userText);

        panel.add(panel1);

        JPanel jPanel2 = new JPanel();
        JLabel userLabel1 = new JLabel("待匹配数据:");
        userLabel1.setBounds(10,50,80,25);
        jPanel2.add(userLabel1);
        final JTextField userText1 = new JTextField(20);
        userText1.setBounds(100,50,165,25);

        jPanel2.add(userText1);

        panel.add(jPanel2);

        final JTextArea jTextArea = new JTextArea();

        JScrollPane jScrollPane = new JScrollPane(jTextArea);
        //分别设置水平和垂直滚动条自动出现 
        jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);


        JPanel jPanel3 = new JPanel();
        JButton jButton1 = new JButton("默认");
        jButton1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                userText.setText("(.*)@P(\\w+)@1P(.*)@Q(\\d*)NAR(.*)@1T(\\w+)@2T(.*)");
                userText1.setText("[)>@06@12S0002@PA2C0230680000@1PCR16-101FV@31PCR16-101FV@12V691669758@10VJPN-ASAHI@2P01@20P101,F,CR16@6D20180814@14D20200814@30PY@Z2@K5500099254@16K0@V700006603@3SS180811151004@Q5000NAR000@20T1@1TK80808L204@2T@1Z1808111510@@ ");
            }
        });
        jPanel3.add(jButton1);
        JButton loginButton = new JButton("解析");
        //loginButton.setBounds(10, 100, 20, 25);
        loginButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                String reg = userText.getText();
                if(reg.length()==0){
                    JOptionPane.showMessageDialog(
                            frame, "正则表达式不能为空!");
                    return;
                }
                String str = userText1.getText();
                Pattern p = Pattern.compile(reg);
                Matcher m = p.matcher(str);
                if(m.matches()){
                    jTextArea.setText("");
                    int count= m.groupCount();
                    StringBuilder sb = new StringBuilder("成功匹配 "+count+" 组,分别是:\r\n");
                    jTextArea.append("成功匹配 "+count+"组,分别是:\r\n");
                    for(int i=1;i<=count;i++ ){
                        jTextArea.append("第"+i+"组:"+ m.group(i)+"\r\n");
                    }
                }else{
                    jTextArea.setText("不匹配");
                }
            }
        });
        jPanel3.add(loginButton);
        JButton jButton = new JButton("清空");
        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                userText.setText("");
                userText1.setText("");
                jTextArea.setText("");
            }
        });
        jPanel3.add(jButton);
        panel.add(jPanel3);


        jTextArea.setBounds(10,150,250,100);
        jTextArea.setLineWrap(true);
        jTextArea.setWrapStyleWord(true);
        jTextArea.setEditable(false);
        panel.add(jScrollPane);

        frame.getContentPane().add(panel);
        // 显示窗口
        frame.setResizable(false);
        frame.setVisible(true);
    }
}

3 程序太简单了,没什么可说,仅做备份。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值