日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java提取文本文档中的所有网址(小案例介绍正则基础知识)

發布時間:2023/12/10 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java提取文本文档中的所有网址(小案例介绍正则基础知识) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正則表達式基礎以及Java中使用正則查找

定義: 正則表達式是一些用來匹配和處理文本的字符串

正則的基礎(先大致了解下)

1. 正則表達式的作用

  • 查找特定的信息(搜索)

  • 替換一些文本(替換)

  • 2. 正則基礎知識

    1. 元字符

    • . 匹配除換行符(\n)以外的任何單個字符
    • w 匹配字母、數字、下劃線、漢字
    • s 匹配任意空白字符(包括空格、制表符、換頁符等)
    • d 匹配數字,匹配單詞的開始或結束
    • ^ 匹配字符串的開始
    • $ 匹配字符串的結束

    例子:

    #匹配abc開頭的字符串 ^abd#匹配8位數字的QQ號 ^dddddddd$#匹配以153開頭的11位數字手機號 ^153dddddddd$

    2. 重復限定符

    • * 重復0次或更多次
    • + 重復1次或更多次
    • ? 重復0次或1次
    • {n} 重復n次
    • {n,} 重復n次或更多次
    • {n,m} 重復n到m次
    #匹配8位數字QQ號 ^d{8}$#匹配153開頭11位手機號 ^(153)d{8}$#匹配身份證號第7到14位(出生日期) ^d{7,14}$ #匹配以a開頭的,0個或者多個以b結尾的字符串 ^ab*$

    3. 分組

    #匹配字符串中包含0到多個ab開頭 ^(ab)*$

    4. 條件或

    正則用【|】表示或,當滿足分支里任何一種條件時,就會匹配成功

    #匹配手機號中聯通的手機(聯通號段130/131/132等) ^(130|131|132)d{8}$

    5. 區間

    正則提供‘[]’表示區間條件

    • [0-9] 限定0到9
    • [a-z] 限定a-z
    • [165] 限定某些數字

    Java中使用正則表達式

    這里會說一個例子:在一段txt文檔中找出所有的網址

    Java與正則

    1. 這里有一段100000000(自己數,我也不知道幾個0)行的文本,如圖

    2. 高手寫好的匹配url的正則(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]當然還有n多種方式

    3. Java代碼獻上

    正則表達式匹配使用方式

    /*** 參數1 regex:我們的正則字符串* 參數2 就是一大段文本,這里用data表示*/ private String filterSpecialStr(String regex, String data) {//sb存放正則匹配的結果StringBuffer sb = new StringBuffer();//編譯正則字符串Pattern p = Pattern.compile(regex);//利用正則去匹配Matcher matcher = p.matcher(data);//如果找到了我們正則里要的東西while (matcher.find()) {//保存到sb中,"\r\n"表示找到一個放一行,就是換行sb.append(matcher.group() + "\r\n");}return sb.toString(); }

    4. 這里增加兩個文件的讀寫

    Java讀取文本文件

    private String readFile(String pathName) {//讀取到的文件內容放到這個sb里StringBuffer sb = new StringBuffer();//The Java 7 try-with-resources syntax (Automatic Resource Management) is nice (這種寫法是Java7的一種語法,自動管理資源,不理解自行百度)try (BufferedReader br = new BufferedReader(new FileReader(pathName))) {String line;while ((line = br.readLine()) != null) {sb.append(line + "\r\n");}System.out.println("讀取文件完成");} catch (IOException e) {e.printStackTrace();}return sb.toString();}

    Java寫入文本文件

    private void writeFile(String pathName, String data) {try {//文件不存在的話新建,存在覆蓋File file = new File(pathName);file.createNewFile();//The Java 7 try-with-resources syntax (Automatic Resource Management) is nicetry (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {bw.write(data);bw.flush();System.out.println("文件寫入完成");} catch (IOException e) {e.printStackTrace();}} catch (IOException e) {e.printStackTrace();} }

    5. 執行結果

    測試代碼

    把文檔.txt讀取到Java中,然后處理完,最后寫到我指定的文件中

    public static void main(String[] args) {//0. 準備好正則String regex = "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";//1. 讀取文檔String data = readFile("F:\\test\\文檔.txt");//2. 正則查找String needData = filterSpecialStr(regex, data);//3. 寫到某個文件中writeFile("F:\\test\\needData.txt", needData); }

    結果

    轉載于:https://www.cnblogs.com/baijinqiang/p/11067033.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的Java提取文本文档中的所有网址(小案例介绍正则基础知识)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。