------Java培训期待与您交流! -------
正则表达式
一、概述
1.简介:含有一些具有特殊意义的字符组成的字符串
2.作用:判断句子中,某一字符串是否符合某一格式
3.优势:简化对某一特定格式的操作
4.缺点:对代码的阅读性较差
二、元字符
具有特殊含义的字符
元字符正则表达式中的写法含义
."."代表任意一个字符
\d"\\d"代表0~9任何一个数字
\D"\\D"代表任何一个非数字字符
\s"\\s"代表空白字符,如‘\t’‘\n’
\s"\\S"代表非空白字符
\w"\\w"代表可用作标识符的字符,但不包含‘$’
\w"\\W"代表不可用于标识符的字符
\p{Lower}"\\p{Lower}"代表小写字母{a~z}
\p{Upper}"\\p{Upper}"代表大写字母{A~Z}
\p{ASCII}"\\p{ASCII}"ASCII字符
\p{Alpha}"\\p{Alpha}"字母字符
\p{Digit}"\\p{Digit}"十进制字数字,即[0~9]
\p{Alnum}"\\p{Alnum}"数字或字母字符
\p{Punct}"\\p{Punct}"标点符号:!"#$%&'()*+-/:;<=>@[\]^_{}|~
\p{Greph}"\\p{Greph}"可见字符:[\p{Alnum}\p{Punct}]
\p{Print}"\\p{Print}"可打印字符:[\p{Graph}\x20]
\p{Blank}"\\p{Blank}"空格或制表符:[\t]
\p{Cntrl}"\\p{Cntrl}"控制字符
-------------
限定修饰符
限定修饰符意义示例
?0次或1次A
*0次或多次A*
+一次或多次A+
{n}正好出现n次A{2}
{n,}至少出现n次A{3,}
{n,m}出现n到m次之间A{2,5}
#---------------------------------------------------
三、利用正则表达式编写的工具
去除txt记事本中匹配字串符的窗口程序
关键代码如下:
源文件及目标文件路径的选取
textField_1.setColumns(10); JButton button_1 = new JButton("\u9009\u62E9\u8DEF\u5F84"); button_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser chooser= new JFileChooser(); FileNameExtensionFilter filer = new FileNameExtensionFilter(".txt","txt"); chooser.setFileFilter(filer); chooser.setMultiSelectionEnabled(false); int result = chooser.showSaveDialog(getContentPane()); if (result == JFileChooser.APPROVE_OPTION) { objectFile = chooser.getSelectedFile(); if (!objectFile.getName().endsWith(".txt")) { if (!objectFile.exists()) { File temFile = new File(objectFile.getParent(),objectFile.getName()+".txt"); objectFile = temFile; } else { JOptionPane.showMessageDialog(getContentPane(), "请选择文本文件或输入名称","",JOptionPane.WARNING_MESSAGE); return; } } textField_1.setText(objectFile.getAbsolutePath()); } } });
#---------------------------------
文件类型的判断以及正则表达式的匹配判断
JButton button_2 = new JButton("\u8F6C\u6362"); button_2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String tem = textField_2.getText(); if (sourceFile == null) { Toolkit.getDefaultToolkit().beep(); JOptionPane.showMessageDialog(getContentPane(), "请选择源文件","",JOptionPane.WARNING_MESSAGE); return; } if (objectFile == null) { Toolkit.getDefaultToolkit().beep(); JOptionPane.showMessageDialog(getContentPane(), "请选择目标文件","",JOptionPane.WARNING_MESSAGE); return; } if (tem.equals("") ) { Toolkit.getDefaultToolkit().beep(); JOptionPane.showMessageDialog(getContentPane(), "请输入正则表达式","",JOptionPane.WARNING_MESSAGE); return; } if (!objectFile.exists()) { try { objectFile.createNewFile(); } catch (IOException e1) { // TODO 自动生成的 catch 块 e1.printStackTrace(); } } FileWriter writer=null; System.out.println(tem); try { writer = new FileWriter(objectFile); scanner = new Scanner(sourceFile); while(scanner.hasNextLine()) { StringBuilder str = new StringBuilder(scanner.nextLine()); scan = new Scanner(str.toString()); String num = scan.findInLine(tem.trim()); while (num != null) { str.delete(str.indexOf(num), str.indexOf(num)+num.length()); num = scan.findInLine(tem.trim()); } str.append("\r\n"); writer.write(str.toString()); } writer.flush(); } catch (FileNotFoundException e2) { // TODO 自动生成的 catch 块 e2.printStackTrace(); } catch (IOException e3) { // TODO 自动生成的 catch 块 e3.printStackTrace(); } finally { try { writer.close(); } catch (IOException e4) { // TODO 自动生成的 catch 块 e4.printStackTrace(); } scanner.close(); scan.close(); } } });