<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # JAVA之旅(三十四)——自定義服務端,URLConnection,正則表達式特點,匹配,切割,替換,獲取,網頁爬蟲 * * * > 我們接著來說網絡編程,TCP ## 一.自定義服務端 > 我們直接寫一個服務端,讓本機去連接,可以看到什么樣的效果 ~~~ package com.lgl.socket; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class BrowserServer { //http://192.168.1.103:11000/ public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(11000); Socket s = ss.accept(); System.out.println(s.getInetAddress().getHostName() + ":" + s.getInetAddress().getHostAddress()); PrintWriter out = new PrintWriter(s.getOutputStream(), true); out.println("Hello Client"); s.close(); ss.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ~~~ > 我們運行了之后直接訪問[http://192.168.1.103:11000/](http://192.168.1.103:11000/)就知道什么效果 ![這里寫圖片描述](http://img.blog.csdn.net/20160821154226135) > 我們控制臺也打印出我們的地址來了 ![這里寫圖片描述](http://img.blog.csdn.net/20160821154323802) > 比較有意思的是,既然是網頁打開,那么他是支持html的,我們來輸出這句 ~~~ out.println("<font color='red' size='30'>Hello Client"); ~~~ > 你就可以看到 ![這里寫圖片描述](http://img.blog.csdn.net/20160821154620140) ## 二.URLConnection > 先看URL的用法 ~~~ package com.lgl.socket; import java.net.MalformedURLException; import java.net.URL; public class URLDemo { public static void main(String[] args) { try { URL url = new URL("http://192.168.1.102/myweb/test.html?name=zhangsan&age=18"); // 協議 System.out.println(url.getProtocol()); // 主機 System.out.println(url.getHost()); // 端口 System.out.println(url.getPort()); // 路徑 System.out.println(url.getPath()); // 查詢部 System.out.println(url.getQuery()); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ~~~ > 得到的結果 ![這里寫圖片描述](http://img.blog.csdn.net/20160823215453693) > 繼續來看 ~~~ // 返回一個url連接對象 URLConnection openConnection = url.openConnection(); System.out.println(openConnection); InputStream inputStream = openConnection.getInputStream(); byte[] buf = new byte[1024]; int len = inputStream.read(buf); System.out.println(new String(buf, 0, len)); ~~~ > 其實可以讀取流,我們從流中拿到我們想要的東西 ## 三.正則表達式特點 > 正則表達式:你可以理解為符合一定規則的表達式,正則我們雖然用的不多,但是確實比較適用的,我們主要來看他的做用 * 專門操作字符串 > 我們直接來看下使用方法 > > 我們現在有一個需求 * 對QQ號碼進行效驗,要求5-15位,不能開頭,只能是數字 > 先看一下我們的傳統方式是怎么去計算的 ~~~ public class Test { public static void main(String[] args) { /** * 對QQ號碼進行效驗,要求5-15位,不能開頭,只能是數字 */ String qq = "11299923"; int len = qq.length(); // 長度 if (len > 5 && len <= 15) { // 不能0開頭 if (!qq.startsWith("0")) { // 全部是數字 char[] charArray = qq.toCharArray(); boolean flag = false; for (int i = 0; i < charArray.length; i++) { if (!(charArray[i] >= '0' && charArray[i] <= '9')) { flag = true; break; } } if (flag) { System.err.println("QQ:" + qq); } else { System.out.println("非純數字"); } } else { System.out.println("0開頭不符合規范"); } } else { System.out.println("QQ長度有問題"); } } } ~~~ > 這是一件非常麻煩的事情的,而我們來看下正則表達式,是怎么表示的 ~~~ public class Test1 { public static void main(String[] args) { String qq = "789152"; /** * 我只要告訴你對與錯就行 */ String regex = "[1-9][0-9]{4,14}"; boolean flag = qq.matches(regex); if (flag) { System.out.println("QQ:" + qq); } else { System.out.println("錯誤"); } } } ~~~ > 非常的強大,只要幾行代碼就可以顯示,牛啊,這符號定義我們稍后解答 ## 四.匹配 > 正則很厲害,我們來看下他的作用 * 特點:用一些特定的符號來表示一些代碼操作,這樣就簡化了書寫,學習正則表達式就是用來學習一些特殊符號的使用 ![這里寫圖片描述](http://img.blog.csdn.net/20160824223314946) * 1.匹配:matches > 我們來看下這段代碼 ~~~ String str = "c"; /** * 這個字符串只能是bcd中的其中一個,而且只能是一個字符 */ String reg = "[bcd]"; boolean flag = str.matches(reg); System.out.println(flag); ~~~ > 含義理解清楚,其實就比較順眼了一點點了,我們繼續 ~~~ /** * 這個字符的第二位是a-z就行 */ String reg1 = "[bcd][a-z]"; boolean flag1 = str.matches(reg); System.out.println(flag1); ~~~ > 到現在是否是有點概念?我們繼續,如果我現在想我第一個是個字母第二個是個數字,該怎么去拼? ~~~ String reg2 = "[a-zA-Z][0-9]"; boolean flag2 = str.matches(reg2); System.out.println(flag2); ~~~ > 大致的講解一下,因為我也不是很熟,嘿嘿 ## 五.切割 > 這個切割,在string也是一個切割split,而我們的正則,也是有的,我們繼續看 ~~~ public class Test2 { public static void main(String[] args) { String str = "zhangsan,lisi,wangwu"; String reg = ","; String[] split = str.split(reg); for (String s : split) { System.out.println(s); } } } ~~~ > 我們輸出 ![這里寫圖片描述](http://img.blog.csdn.net/20160827162818963) ## 六.替換 > 正則表達式就是string的操作,我們看下替換 ~~~ public class Test2 { public static void main(String[] args) { // 將數字連續超過五個替換成#號 replaceAll("fwfsda777777fs74666677s", "\\d{5,}", "#"); } public static void replaceAll(String str, String reg, String newStr) { str = str.replaceAll(reg, newStr); System.out.println(str); } } ~~~ > 得到的結果 ![這里寫圖片描述](http://img.blog.csdn.net/20160827163958152) # 七.獲取 * 1.將正則表達式封裝成對象 * 2.讓正則表達式和要操作的對象進行關聯 * 3.關聯后,獲取正則匹配引擎 * 4.通過引擎對符合規則的子串進行操作,比如取出 ~~~ import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test2 { public static void main(String[] args) { String string = " hello java android c cc ccc cccc ccccc"; //test String reg = "[a-z]"; //將規則封裝成對象 Pattern p = Pattern.compile(reg); //讓正則對象和要作用的字符串相關聯,獲取匹配器對象 Matcher matcher = p.matcher(string); System.out.println(matcher.matches()); } } ~~~ > 體現了一個模式而已,我們可用通過這個模式去獲取字符串 ## 八.網頁爬蟲 > 爬蟲我們再熟悉不過了,也俗稱蜘蛛,其實就是獲取一些數據罷了,我們也是可以用到我們正則中的獲取功能的 ~~~ import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test2 { public static void main(String[] args) { } /** * 獲取指定文檔中的郵箱地址 */ public static void getEmail() { try { BufferedReader bufr = new BufferedReader( new FileReader("email.txt")); String line = null; String emailreg = "\\w+@\\w+(\\.\\w+)+"; Pattern p = Pattern.compile(emailreg); while ((line = bufr.readLine()) != null) { System.out.println(line); // 判斷郵箱 Matcher m = p.matcher(line); while (m.find()) { System.out.println(m.group()); // 這樣就拿到所有的郵箱了 } } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ~~~ > 這樣我們的所有郵箱號碼就拿到了,當然,這只是一個簡單的爬蟲概念,爬蟲博大精深,我們要學習的話還是要系統的了解一下才好!!! > > 好的,我們的java之旅也到這里over了,我們本篇也結束了 版權聲明:本文為博主原創文章,博客地址:http://blog.csdn.net/qq_26787115,未經博主允許不得轉載。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看