博客详情

Regex正则表达式小工具 (原创)

作者: 朝如青丝暮成雪
发布时间:2017-10-11 22:53:55  文章分类:java小程序   阅读(959)  评论(0)

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();
					}
				}
	    }
}



MyJFrame.java



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



关键字:  Regex  正则表达式
评论信息
暂无评论
发表评论

亲,您还没有登陆,暂不能评论哦! 去 登陆 | 注册

博主信息
   
数据加载中,请稍候...
文章分类
   
数据加载中,请稍候...
阅读排行
 
数据加载中,请稍候...
评论排行
 
数据加载中,请稍候...

Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1

鄂公网安备 42011102000739号