欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java正则表达式的应用 java读取文件并获取电话号码

程序员文章站 2024-03-08 10:54:10
实现功能:读取文件,将其中的电话号码存入一个set返回。 方法介绍: find():尝试查找与该模式匹配的输入序列的下一个子序列。 group():返回由以前匹配操作...

实现功能:读取文件,将其中的电话号码存入一个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 
{
  
  /**
   * 获得电话号码的正则表达式:包括固定电话和移动电话
   * 符合规则的号码:
   *   1》、移动电话
   *     86+‘-'+11位电话号码
   *     86+11位正常的电话号码
   *     11位正常电话号码a
   *     (+86) + 11位电话号码
   *     (86) + 11位电话号码
   *   2》、固定电话
   *     区号 + ‘-' + 固定电话 + ‘-' + 分机号
   *     区号 + ‘-' + 固定电话 
   *     区号 + 固定电话
   * @return  电话号码的正则表达式
   */
  public static string isphoneregexp()
  {
    string regexp = "";
    
    //能满足最长匹配,但无法完成国家区域号和电话号码之间有空格的情况
    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、读取文件并调用电话号码获取
实现方式:根据文件路径获得文件后,一行行读取,去获取里面的电话号码

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("读取文件内容出错");
      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);
  }

文件中数据:

java正则表达式的应用 java读取文件并获取电话号码

结果:

电话集合:[86132221, (86)13222144332, 86-13222144332, 32434343, (+86)13222144332, 13888888888]

以上就是整个应用的实现过程,希望大家通过这个案例,对java正则表达式使用更加熟练。