Regex正在表达式小工具,用于匹配、检索、替换文本中满足特定匹配模式的字符。 小巧的程序,协助程序员完成一些繁重的文字匹配工作 ,简单3个类 500行代码不到。
FileUtils.java
package com.jelly.regexdemo; import java.io.BufferedInputStream; import java.io.FileInputStream; public class FileUtils { /** * 判断文件的编码格式 * @param fileName 文件名字符串 * @return 文件编码格式 * @throws Exception */ public static String getFileEncoding(String fileName) throws Exception{ BufferedInputStream bin = null; try { bin= new BufferedInputStream( new FileInputStream(fileName)); int p = (bin.read() << 8) + bin.read(); String code = null; switch (p) { case 0xefbb: code = "UTF-8"; break; case 0xfffe: code = "Unicode"; break; case 0xfeff: code = "UTF-16BE"; break; default: code = "GBK"; } return code; } finally{ if(bin!=null){ bin.close(); } } } }
package com.jelly.regexdemo; import java.awt.HeadlessException; import javax.swing.JFrame; public class MyJFrame extends JFrame { private static final long serialVersionUID = 1L; public MyJFrame() throws HeadlessException{ super(); } public MyJFrame(String title,int width,int height, int x,int y){ super(); this.setTitle(title); this.setSize(width, height); this.setLocation(x, y); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
RegexDemo.java
package com.jelly.regexdemo; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.filechooser.FileNameExtensionFilter; public class RegexDemo implements ActionListener{ private JFrame f;//窗体 //private JDialog d1,d2;//对话框 private String opendir,savedir; private JPanel panel1, panel3, panel4 ; private JLabel label1, label2, label3; private JButton button1, button2, button3, button4, button5, button6, button7; private JScrollPane scrollpane1, scrollpane2; private JTextArea textarea1, textarea2; private JTextField textfield1; public static void main(String[] args) { RegexDemo demo = new RegexDemo(); demo.init(); } void init() { f = new MyJFrame("正则表达式工具", 550, 550, 450, 100); f.setLayout(new GridBagLayout()); // f.setResizable(false); label1 = new JLabel("源字符"); label2 = new JLabel("正则表达式"); label3 = new JLabel("匹配结果"); button1 = new JButton("打开"); button2 = new JButton("清空"); button3 = new JButton("清空"); button4 = new JButton("匹配"); button5 = new JButton("替换"); button6 = new JButton("清空"); button7 = new JButton("保存"); button1.addActionListener(this); button1.setActionCommand("btn1"); button2.addActionListener(this); button2.setActionCommand("btn2"); button3.addActionListener(this); button3.setActionCommand("btn3"); button4.addActionListener(this); button4.setActionCommand("btn4"); button5.addActionListener(this); button5.setActionCommand("btn5"); button6.addActionListener(this); button6.setActionCommand("btn6"); button7.addActionListener(this); button7.setActionCommand("btn7"); textarea1 = new JTextArea(); textarea2 = new JTextArea(); scrollpane1 = new JScrollPane(textarea1); scrollpane2 = new JScrollPane(textarea2); textfield1 = new JTextField(30); textarea1.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { if (e.isControlDown()&& e.getKeyCode() == KeyEvent.VK_O) { //System.out.println("ctrl +S has pressed"); open();//打开 } } }); textarea2.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { if (e.isControlDown()&& e.getKeyCode() == KeyEvent.VK_S) { //System.out.println("ctrl +S has pressed"); save();//保存 } } }); panel1 = new JPanel(); //panel2 = new JPanel(); panel3 = new JPanel(); panel4 = new JPanel(); //panel5 = new JPanel(); panel1.add(label1); panel1.add(button1); panel1.add(button2); panel3.add(label2); panel3.add(textfield1); panel3.add(button3); panel4.add(label3); panel4.add(button4); panel4.add(button5); panel4.add(button6); panel4.add(button7); GridBagConstraints gc = new GridBagConstraints(); gc.gridx = 0; gc.gridy = 0; gc.gridheight = 1; gc.insets = new Insets(10, 0, 5, 0); f.add(panel1, gc); gc.gridx = 0; gc.gridy = 1; gc.gridheight = 2; gc.fill = GridBagConstraints.BOTH; gc.weighty =2; gc.weightx = 2; gc.insets = new Insets(0, 30, 0, 30); f.add(scrollpane1, gc); gc.gridx = 0; gc.gridy = 5; gc.gridheight = 1; gc.fill = GridBagConstraints.BOTH; gc.weighty =0; gc.weightx = 0; gc.insets = new Insets(0, 0, 0, 0); //gc.ipadx=1; //gc.ipady=1; f.add(panel3, gc); gc.gridx = 0; gc.gridy = 6; gc.gridheight = 1; gc.fill = GridBagConstraints.NONE; f.add(panel4, gc); gc.ipadx=0; gc.ipady=0; gc.insets = new Insets(0, 0, 0, 0); gc.gridx = 0; gc.gridy = 7; gc.gridheight = 4; gc.fill = GridBagConstraints.BOTH; gc.weighty = 2; gc.weightx = 2; gc.insets = new Insets(0, 30, 30, 30); f.add(scrollpane2, gc); f.setResizable(true); f.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { switch (e.getActionCommand()) { case "btn1"://打开 open(); break; case "btn2": textarea1.setText(""); break; case "btn3": textfield1.setText(""); break; case "btn4": //点击匹配按钮 match();//执行匹配方法 break; case "btn5": //点击替换按钮 replace(); //执行替换 break; case "btn6"://点击清空按钮 textarea2.setText(""); break; case "btn7"://保存 save(); break; } } void match(){//匹配 String str=textarea1.getText(); if(str==null||str.trim().length()==0){ //弹出提示框 alertDialog("提示","请输入源字符",500, 300, 200, 150,"确定"); return; } String regex=textfield1.getText(); if(regex==null||regex.equals("")){ //弹出提示框 alertDialog("提示","请输入正则表达式",500, 300, 200, 150,"确定"); return ; } textarea2.setText(""); Pattern p=Pattern.compile(regex); Matcher m=p.matcher(str); while(m.find()) { // System.out.println("开始的位置 :"+m.start()+"结束位置:"+m.end()); String s = m.group(); // System.out.println(s); textarea2.append(s+"\n"); } } void replace(){//替换 String str=textarea1.getText(); if(str==null||str.trim().length()==0){ //弹出提示框 alertDialog("提示","请输入源字符",500, 300, 200, 150,"确定"); return; } String regex=textfield1.getText(); if(regex==null||regex.equals("")){ //弹出提示框 alertDialog("提示","请输入正则表达式",500, 300, 200, 150,"确定"); return ; } showTextDialog("提示","请输入正则表达式替换字符",500, 300,250,200,"确定","取消"); } void open(){//文件打开 InputStreamReader reader = null; try { JFileChooser wjopen=null; if(opendir!=null&&opendir.trim().length()>0){ wjopen=new JFileChooser(opendir); }else{ wjopen=new JFileChooser(); } wjopen.setDialogTitle("文件打开"); FileNameExtensionFilter fef1=new FileNameExtensionFilter("文本文件","txt"); FileNameExtensionFilter fef2=new FileNameExtensionFilter("java源文件","java"); FileNameExtensionFilter fef3=new FileNameExtensionFilter("c#源文件","cs"); FileNameExtensionFilter fef4=new FileNameExtensionFilter("c源文件","c"); FileNameExtensionFilter fef5=new FileNameExtensionFilter("c++源文件","cpp"); FileNameExtensionFilter fef6=new FileNameExtensionFilter("php源文件","php"); FileNameExtensionFilter fef7=new FileNameExtensionFilter("JavaScript源文件","js"); FileNameExtensionFilter fef8=new FileNameExtensionFilter("sql文件","sql"); wjopen.addChoosableFileFilter(fef1); wjopen.addChoosableFileFilter(fef2); wjopen.addChoosableFileFilter(fef3); wjopen.addChoosableFileFilter(fef4); wjopen.addChoosableFileFilter(fef5); wjopen.addChoosableFileFilter(fef6); wjopen.addChoosableFileFilter(fef7); wjopen.addChoosableFileFilter(fef8); wjopen.setMultiSelectionEnabled(true); wjopen.setDialogType(JFileChooser.OPEN_DIALOG); int value=wjopen.showOpenDialog(null); wjopen.setVisible(true); if(value==JFileChooser.APPROVE_OPTION){//用户点击了打开 File[] openfiles= wjopen.getSelectedFiles();//选择的文件 if(openfiles!=null){ this.opendir=openfiles[0].getParent(); for(int i=0;i<openfiles.length;i++){ String encoding= FileUtils.getFileEncoding(openfiles[i].getAbsolutePath()); reader=new InputStreamReader(new FileInputStream(openfiles[i]), encoding); char[] buf=new char[1024]; int len=0; while((len=reader.read(buf))>0){ textarea1.append (new String(buf,0,len)); } } } } } catch (Exception e) { e.printStackTrace(); } finally {//关流操作 try { if (reader != null) { reader.close(); } } catch (Exception e) { System.out.println("InputStreamReader close IOException" + e.getStackTrace()); } } } void save(){//保存 BufferedWriter writer=null; try { JFileChooser wjsave=null; if(savedir!=null&&savedir.trim().length()>0){ wjsave=new JFileChooser(savedir); }else{ wjsave=new JFileChooser(); } wjsave.setDialogTitle("保存到文件"); FileNameExtensionFilter fef1=new FileNameExtensionFilter("文本文件","txt"); FileNameExtensionFilter fef2=new FileNameExtensionFilter("java源文件","java"); FileNameExtensionFilter fef3=new FileNameExtensionFilter("c#源文件","cs"); FileNameExtensionFilter fef4=new FileNameExtensionFilter("c源文件","c"); FileNameExtensionFilter fef5=new FileNameExtensionFilter("c++源文件","cpp"); FileNameExtensionFilter fef6=new FileNameExtensionFilter("php源文件","php"); FileNameExtensionFilter fef7=new FileNameExtensionFilter("JavaScript源文件","js"); FileNameExtensionFilter fef8=new FileNameExtensionFilter("sql文件","sql"); wjsave.addChoosableFileFilter(fef1); wjsave.addChoosableFileFilter(fef2); wjsave.addChoosableFileFilter(fef3); wjsave.addChoosableFileFilter(fef4); wjsave.addChoosableFileFilter(fef5); wjsave.addChoosableFileFilter(fef6); wjsave.addChoosableFileFilter(fef7); wjsave.addChoosableFileFilter(fef8); wjsave.setDialogType(JFileChooser.SAVE_DIALOG); int value= wjsave.showSaveDialog(null); wjsave.setVisible(true); if(value==JFileChooser.APPROVE_OPTION){//用户点击了保存 File savefile= wjsave.getSelectedFile();// 保存的文件 savedir= savefile.getParent();//将文件目录保存到成员变量 // writer=new BufferedWriter(new FileWriter(savefile)); writer = new BufferedWriter(new FileWriter(savefile)); String result=textarea2.getText(); String[] temp=result.split("[\\r\\n]"); for (int i = 0; i < temp.length; i++) { writer.write(temp[i]); writer.write("\r\n"); } } } catch (Exception e) { e.printStackTrace(); } finally {//关流操作 try { if (writer != null) { writer.close(); } } catch (Exception e) { System.out.println("BufferedWriter close IOException" + e.getStackTrace()); } } } void alertDialog(String title,String text,int x,int y ,int width,int height,String btntext){//弹出一个框 if(title==null||title.trim().length()==0){ title="提示"; } if(btntext==null||btntext.trim().length()==0){ btntext="确定"; } final JDialog d=new JDialog(f); // d.setBounds(480, 300, 200, 150); d.setBounds(x, y, width, height); d.setTitle(title); JLabel label=new JLabel(text); JButton ok=new JButton(btntext); ok.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { d.dispose(); } }); d.setLayout(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); gc.gridx=0;gc.gridy=0;gc.gridheight=1;gc.gridwidth=3; gc.insets=new Insets(5,5,20,5); d.add(label,gc); gc.gridx=0;gc.gridy=1;gc.gridheight=1;gc.gridwidth=1; gc.insets=new Insets(10,20,10,5); d.add(ok,gc); d.setModal(true); d.setVisible(true); d.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } void showTextDialog(String title,String text,int x,int y ,int width,int height,String oktext,String calceltext){//弹出一个框 final JDialog d=new JDialog(f); d.setBounds(x, y, width, height); d.setTitle(title); JButton okbtn=new JButton(oktext); JButton cancelbtn=new JButton(calceltext); final JTextField textfield=new JTextField(15);//输入框 JLabel label=new JLabel(text); d.setLayout(new GridLayout(3, 1)); cancelbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { d.dispose(); } }); okbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // RegexDemo.txt=textfield.getText(); // System.out.println(RegexDemo.txt); String str=textarea1.getText(); String regex=textfield1.getText();// String replacestr= textfield.getText(); String s=str.replaceAll(regex, replacestr); textarea2.setText(s); d.dispose(); } }); okbtn.addActionListener(this); okbtn.setActionCommand("closeText"); JPanel panel1=new JPanel(); JPanel panel2=new JPanel(); JPanel panel3=new JPanel(); panel1.add(label); panel2.add(textfield); panel3.add(cancelbtn); panel3.add(okbtn); d.add(panel1); d.add(panel2); d.add(panel3); d.setModal(true); d.setVisible(true); d.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } }
运行效果:
从大文本串种匹配出字母a,并替换为符号* 。
百度云下载 Regex.jar
链接:http://pan.baidu.com/s/1slwl9Jv 密码:ekfb
上一篇:mapperGen图形化生成工具
下一篇:如何看待最低工资法
Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1