欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java正則表達(dá)式的應(yīng)用 java讀取文件并獲取電話號(hào)碼

 更新時(shí)間:2015年11月27日 17:09:04   作者:WhyWin  
這篇文章主要介紹了java正則表達(dá)式的應(yīng)用,應(yīng)用的內(nèi)容是java讀取文件并獲取電話號(hào)碼,感興趣的小伙伴們可以參考一下

實(shí)現(xiàn)功能:讀取文件,將其中的電話號(hào)碼存入一個(gè)Set返回。

方法介紹:

find():嘗試查找與該模式匹配的輸入序列的下一個(gè)子序列。

group():返回由以前匹配操作所匹配的輸入子序列。

1、從一個(gè)字符串中獲取出其中的電話號(hào)碼

import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 從字符串中截取出電話號(hào)碼
 * @author zcr
 *
 */
public class CheckIfIsPhoneNumber 
{
  
  /**
   * 獲得電話號(hào)碼的正則表達(dá)式:包括固定電話和移動(dòng)電話
   * 符合規(guī)則的號(hào)碼:
   *   1》、移動(dòng)電話
   *     86+‘-'+11位電話號(hào)碼
   *     86+11位正常的電話號(hào)碼
   *     11位正常電話號(hào)碼a
   *     (+86) + 11位電話號(hào)碼
   *     (86) + 11位電話號(hào)碼
   *   2》、固定電話
   *     區(qū)號(hào) + ‘-' + 固定電話 + ‘-' + 分機(jī)號(hào)
   *     區(qū)號(hào) + ‘-' + 固定電話 
   *     區(qū)號(hào) + 固定電話
   * @return  電話號(hào)碼的正則表達(dá)式
   */
  public static String isPhoneRegexp()
  {
    String regexp = "";
    
    //能滿足最長(zhǎng)匹配,但無(wú)法完成國(guó)家區(qū)域號(hào)和電話號(hào)碼之間有空格的情況
    String mobilePhoneRegexp = "(?:(\\(\\+?86\\))((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\\d{8})|" +   
        "(?:86-?((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\\d{8})|" +
        "(?:((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\\d{8})";
    
    
    
    //  System.out.println("regexp = " + mobilePhoneRegexp);
    //固定電話正則表達(dá)式
    
    String landlinePhoneRegexp = "(?:(\\(\\+?86\\))(0[0-9]{2,3}\\-?)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?)|" +
        "(?:(86-?)?(0[0-9]{2,3}\\-?)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?)";  

    regexp += "(?:" + mobilePhoneRegexp + "|" + landlinePhoneRegexp +")"; 
  
    return regexp;
  }
  
  
  /**
   * 從dataStr中獲取出所有的電話號(hào)碼(固話和移動(dòng)電話),將其放入Set
   * @param dataStr  待查找的字符串
   * @param phoneSet  dataStr中的電話號(hào)碼
   */
  public static void getPhoneNumFromStrIntoSet(String dataStr,Set<String> phoneSet)
  {
    //獲得固定電話和移動(dòng)電話的正則表達(dá)式
    String regexp = isPhoneRegexp();
    
    System.out.println("Regexp = " + regexp);
    
    Pattern pattern = Pattern.compile(regexp); 
    Matcher matcher = pattern.matcher(dataStr); 

    //找與該模式匹配的輸入序列的下一個(gè)子序列
    while (matcher.find()) 
    { 
      //獲取到之前查找到的字符串,并將其添加入set中
      phoneSet.add(matcher.group());
    } 
    //System.out.println(phoneSet);
  }
}

2、讀取文件并調(diào)用電話號(hào)碼獲取
實(shí)現(xiàn)方式:根據(jù)文件路徑獲得文件后,一行行讀取,去獲取里面的電話號(hào)碼

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;



/**
 * 讀取文件操作
 * 
 * @author zcr
 * 
 */
public class ImportFile
{
  /**
   * 讀取文件,將文件中的電話號(hào)碼讀取出來(lái),保存在Set中。
   * @param filePath  文件的絕對(duì)路徑
   * @return      文件中包含的電話號(hào)碼
   */
  public static Set<String> getPhoneNumFromFile(String filePath)
  {
    Set<String> phoneSet = new HashSet<String>();
    
    try
    {
      String encoding = "UTF-8";
      File file = new File(filePath);
      if (file.isFile() && file.exists())
      { // 判斷文件是否存在
        InputStreamReader read = new InputStreamReader(
            new FileInputStream(file), encoding);// 考慮到編碼格
        BufferedReader bufferedReader = new BufferedReader(read);
        String lineTxt = null;

        while ((lineTxt = bufferedReader.readLine()) != null)
        {
          //讀取文件中的一行,將其中的電話號(hào)碼添加到phoneSet中
          CheckIfIsPhoneNumber.getPhoneNumFromStrIntoSet(lineTxt, phoneSet);
        }
        read.close();
      }
      else
      {
        System.out.println("找不到指定的文件");
      }
    }
    catch (Exception e)
    {
      System.out.println("讀取文件內(nèi)容出錯(cuò)");
      e.printStackTrace();
    }
    
    return phoneSet;
  }

}

3、測(cè)試

public static void main(String argv[])
  {
    String filePath = "F:\\three.txt";  
    
    Set<String> phoneSet = getPhoneNumFromFile(filePath);
    
    System.out.println("電話集合:" + phoneSet);
  }

文件中數(shù)據(jù):

結(jié)果:

電話集合:[86132221, (86)13222144332, 86-13222144332, 32434343, (+86)13222144332, 13888888888]

以上就是整個(gè)應(yīng)用的實(shí)現(xiàn)過(guò)程,希望大家通過(guò)這個(gè)案例,對(duì)java正則表達(dá)式使用更加熟練。

相關(guān)文章

  • java批量修改文件名的實(shí)現(xiàn)方法

    java批量修改文件名的實(shí)現(xiàn)方法

    這篇文章主要介紹了 java批量修改文件名的實(shí)現(xiàn)方法的相關(guān)資料,實(shí)現(xiàn)批量修改文件下的所有文件的文件名,具有一定的參考價(jià)值,需要的朋友可以參考下
    2017-07-07
  • Java中keytool的使用

    Java中keytool的使用

    Keytool 是一個(gè)JAVA環(huán)境下的安全鑰匙與證書(shū)的管理工具,Keytool將密鑰(key)和證書(shū)(certificates)存在一個(gè)稱為keystore 的文件(受密碼保護(hù))中,本文重點(diǎn)給大家介紹keytool的使用,感興趣的朋友一起看看吧
    2022-02-02
  • Linux中JDK安裝配置教程

    Linux中JDK安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了Linux中JDK安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • SpringBoot開(kāi)發(fā)之?dāng)r截器實(shí)例

    SpringBoot開(kāi)發(fā)之?dāng)r截器實(shí)例

    這篇文章主要介紹了SpringBoot開(kāi)發(fā)之?dāng)r截器實(shí)例,Spring?Boot簡(jiǎn)介Spring?Boot發(fā)展史SpringBoot的魅力SpringBoot的優(yōu)點(diǎn)總結(jié)Spring?Boot是一個(gè)基于Spring框架的快速開(kāi)發(fā)腳手架,它簡(jiǎn)化了Spring應(yīng)用的初始化和搭建過(guò)程,需要的朋友可以參考下
    2023-09-09
  • Spring Boot實(shí)現(xiàn)對(duì)文件進(jìn)行壓縮下載功能

    Spring Boot實(shí)現(xiàn)對(duì)文件進(jìn)行壓縮下載功能

    在Web應(yīng)用中,文件下載功能是一個(gè)常見(jiàn)的需求,特別是當(dāng)你需要提供用戶下載各種類型的文件時(shí),本文將演示如何使用Spring Boot框架來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單而強(qiáng)大的文件下載功能,需要的朋友跟隨小編一起學(xué)習(xí)吧
    2023-09-09
  • java并發(fā)編程專題(七)----(JUC)ReadWriteLock的用法

    java并發(fā)編程專題(七)----(JUC)ReadWriteLock的用法

    這篇文章主要介紹了java ReadWriteLock的用法,文中講解非常詳細(xì),示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼)

    java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼)

    這篇文章主要介紹了java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 堆排序?qū)嵗?Java數(shù)組實(shí)現(xiàn))

    堆排序?qū)嵗?Java數(shù)組實(shí)現(xiàn))

    下面小編就為大家分享一篇使用Java數(shù)組實(shí)現(xiàn)堆排序的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • JDK動(dòng)態(tài)代理之WeakCache緩存的實(shí)現(xiàn)機(jī)制

    JDK動(dòng)態(tài)代理之WeakCache緩存的實(shí)現(xiàn)機(jī)制

    這篇文章主要介紹了JDK動(dòng)態(tài)代理之WeakCache緩存的實(shí)現(xiàn)機(jī)制
    2018-02-02
  • Java?SWT中常見(jiàn)彈出框?qū)嵗偨Y(jié)

    Java?SWT中常見(jiàn)彈出框?qū)嵗偨Y(jié)

    剛開(kāi)始寫(xiě)Java工具的小伙伴可能不知道怎么寫(xiě)消息對(duì)話框,在這里總結(jié)一些常用的幾種消息彈出框,下面這篇文章主要給大家介紹了關(guān)于Java?SWT中常見(jiàn)彈出框的相關(guān)資料,需要的朋友可以參考下
    2023-01-01

最新評(píng)論