------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
< 今日心情 >放掉懒惰,再加上一份坚持
一、正则表达式
作用:用于专门操作字符串
特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,这则越长,阅读性越差
二、基本内容
1.字符类
[abc] a、b或c
[^abc] 任意字符,除了a、b或c[a-zA-Z] a到z或者A到Z2.预定义字符类
. 任意字符
\d 数字[0-9]
\D 非数字[^0-9]
\s 空白字符
\S 非空白字符
\w 单词字符[a-zA-Z_0-9]
\W 非单词字符
3.边界匹配器
\b 单词的边界
\B 非单词的边界4.数量词
X? X,出现0次或1次
X* X,出现0次或多次
X+ X,出现1次或多次
X{n,m} X,至少出现n次,至多出现m次
三、网页爬虫
1.原理
连接服务器端Socket接收数据,在数据中匹配内容
2.示例
import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import java.util.*; import java.util.regex.*; class MyWindow { private Frame wMain; private Panel mUp,mBotom; private TextField inputDir; private TextArea content; private Button btn; private Dialog erroyDialog; private Label erroyMessage; private Button erroyBtn_ok; private MenuBar fileMB; private Menu fileMenu; private MenuItem fmClose; private Menu fmOpen; private MenuItem[] fmOpenItem; private MenuItem save,saveAs; public MyWindow() { init(); } protected void init() { wMain=new Frame("bigniu"); wMain.setBounds(300,200,495,400); wMain.setLayout(new FlowLayout(FlowLayout.LEFT,20,20)); inputDir=new TextField(40); content=new TextArea(15,60); btn=new Button("查询"); mUp=new Panel(new BorderLayout(10,10)); mUp.add(inputDir,BorderLayout.CENTER); mUp.add(btn,BorderLayout.EAST); mBotom=new Panel(new BorderLayout(10,10)); mBotom.add(content,BorderLayout.CENTER); erroyDialog=new Dialog(wMain,"错误",true); erroyDialog.setBounds(300,200,200,130); erroyDialog.setLayout(new BorderLayout(10,10)); erroyMessage=new Label(); Panel p=new Panel(new FlowLayout(FlowLayout.RIGHT,10,10)); erroyBtn_ok=new Button("确定"); p.add(erroyBtn_ok); erroyDialog.add(erroyMessage,BorderLayout.CENTER); erroyDialog.add(p,BorderLayout.SOUTH); fileMB=new MenuBar(); fileMenu=new Menu("文件"); fmClose=new MenuItem("关闭"); fmOpen=new Menu("打开"); fmOpenItem=new MenuItem[5]; for(int i=0;i<5;i++) { fmOpenItem[0]=new MenuItem(); fmOpen.add(fmOpenItem[0]); } save=new MenuItem("保存"); saveAs=new MenuItem("另存为"); fileMenu.add(fmOpen); fileMenu.add(save); fileMenu.add(saveAs); fileMenu.add(fmClose); fileMB.add(fileMenu); wMain.setMenuBar(fileMB); wMain.add(mUp); wMain.add(mBotom); addEvent(); wMain.setVisible(true); } protected void btn_click() { URL url=null; URLConnection uc=null; BufferedReader br=null; PrintWriter fw=null; content.setText(""); try { url=new URL(inputDir.getText()); uc=url.openConnection(); br=new BufferedReader(new InputStreamReader(uc.getInputStream())); fw=new PrintWriter(new FileOutputStream("F:/qq.txt"),true); Pattern p=Pattern.compile("[qQ].{0,3}([1-9]\\d{4,14})"); Matcher m; TreeSet ts=new TreeSet (); for(String s=br.readLine();s!=null;s=br.readLine()) { m=p.matcher(s); while(m.find()) { ts.add(m.group(1)); fw.println(m.group(1)); content.append(m.group(1)+"\r\n"); } } m=null; content.setText(""); for(String s:ts) { content.append(s+"\r\n"); } } catch(FileNotFoundException ffe) { erroyMessage.setText("请确认该文件的有效性:‘F:/qq.txt’"); erroyDialog.setVisible(true); } catch (MalformedURLException me) { erroyMessage.setText("这不是一个有效的网址。"); erroyDialog.setVisible(true); } catch(IOException ioe) { erroyMessage.setText("连接失败!"); erroyDialog.setVisible(true); } finally { if(fw!=null) { try { fw.close(); } catch (Exception e) { } } } } protected void addEvent() { wMain.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); erroyDialog.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { erroyDialog.setVisible(false); } }); erroyBtn_ok.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { erroyDialog.setVisible(false); } }); btn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { btn_click(); } }); inputDir.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e) { switch(e.getKeyCode()) { case KeyEvent.VK_ESCAPE : inputDir.setText(" "); break; case KeyEvent.VK_ENTER : btn_click(); break; } } }); } } class AwtDemo { public static void main(String[] args) { new MyWindow(); } }