国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java正則表達式的應用 java讀取文件并獲取電話號碼

2019-11-26 14:48:31
字體:
來源:轉載
供稿:網(wǎng)友

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

方法介紹:

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

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

1、從一個字符串中獲取出其中的電話號碼

import java.util.HashSet;import java.util.Set;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 從字符串中截取出電話號碼 * @author zcr * */public class CheckIfIsPhoneNumber {    /**   * 獲得電話號碼的正則表達式:包括固定電話和移動電話   * 符合規(guī)則的號碼:   *   1》、移動電話   *     86+‘-'+11位電話號碼   *     86+11位正常的電話號碼   *     11位正常電話號碼a   *     (+86) + 11位電話號碼   *     (86) + 11位電話號碼   *   2》、固定電話   *     區(qū)號 + ‘-' + 固定電話 + ‘-' + 分機號   *     區(qū)號 + ‘-' + 固定電話    *     區(qū)號 + 固定電話   * @return  電話號碼的正則表達式   */  public static String isPhoneRegexp()  {    String regexp = "";        //能滿足最長匹配,但無法完成國家區(qū)域號和電話號碼之間有空格的情況    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);    //固定電話正則表達式        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中獲取出所有的電話號碼(固話和移動電話),將其放入Set   * @param dataStr  待查找的字符串   * @param phoneSet  dataStr中的電話號碼   */  public static void getPhoneNumFromStrIntoSet(String dataStr,Set<String> phoneSet)  {    //獲得固定電話和移動電話的正則表達式    String regexp = isPhoneRegexp();        System.out.println("Regexp = " + regexp);        Pattern pattern = Pattern.compile(regexp);     Matcher matcher = pattern.matcher(dataStr);     //找與該模式匹配的輸入序列的下一個子序列    while (matcher.find())     {       //獲取到之前查找到的字符串,并將其添加入set中      phoneSet.add(matcher.group());    }     //System.out.println(phoneSet);  }}

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

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{  /**   * 讀取文件,將文件中的電話號碼讀取出來,保存在Set中。   * @param filePath  文件的絕對路徑   * @return      文件中包含的電話號碼   */  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)        {          //讀取文件中的一行,將其中的電話號碼添加到phoneSet中          CheckIfIsPhoneNumber.getPhoneNumFromStrIntoSet(lineTxt, phoneSet);        }        read.close();      }      else      {        System.out.println("找不到指定的文件");      }    }    catch (Exception e)    {      System.out.println("讀取文件內(nèi)容出錯");      e.printStackTrace();    }        return phoneSet;  }}

3、測試

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

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

結果:

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

以上就是整個應用的實現(xiàn)過程,希望大家通過這個案例,對java正則表達式使用更加熟練。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 涞水县| 云阳县| 江达县| 横峰县| 沽源县| 雷山县| 山东| 竹山县| 平武县| 梁山县| 龙口市| 洪雅县| 泽库县| 民乐县| 徐州市| 栖霞市| 普兰店市| 新郑市| 楚雄市| 威远县| 榆社县| 黄梅县| 紫阳县| 芜湖县| 扎囊县| 临西县| 济南市| 禹城市| 开原市| 堆龙德庆县| 聊城市| 潮安县| 兴宁市| 海南省| 淮滨县| 鄂伦春自治旗| 崇阳县| 陇川县| 肃宁县| 朝阳市| 休宁县|