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

实现功能:读取文件,将其中的电话号码存入一个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);
  }

文件中数据:

结果:

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

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 正则表达式
电话号码
java获取正则表达式、java 获取号码归属地、java获取手机号码、java如何获取手机号码、java正则表达式,以便于您获取更多的相关知识。

时间: 2024-07-29 20:33:31

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

JAVA按字节读取文件的简单实例_java

JAVA的IO流一直都是我比较头疼的部分(我没有系统学过JAVA,一般需要实现什么功能再去看文档). 最近遇到一个需求:一个字节一个字节地读取一个文件.网上很多方法,代码一大堆.我在这里和大家分享一个简单的办法(至少对我的需求是有效的). File file= new File(fileName); //filename为 文件目录,请自行设置 InputStream in= null; byte[] bytes= null; in = new FileInputStream(file); //

Java字符流和字节流对文件操作的区别_java

记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询.Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字符流操作的最小单位则是字符.可以先看一下IO流的概述:   下面首先是通过字符流对文件进行读取和写入: package lib; import jav

java实现两台服务器间文件复制的方法_java

本文实例讲述了java实现两台服务器间文件复制的方法.分享给大家供大家参考.具体分析如下: 通常我们使用最多的文件复制功能就是同服务器之间的文件复制功能,这里介绍的是在普通文件复制上功能升级,可以实现两台服务器实现文件的复制,下面一起来看看代码. 1.服务器端 复制代码 代码如下: package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOut

java正则表达式简单使用和网页爬虫的制作代码_java

正则表达式是一种专门用于对字符串的操作的规则. 1.在String类中就有一些方法是对字符串进行匹配,切割. 判断字符串是否与给出的正则表达式匹配的:boolean matches( String regex); 按照给定的正则表达式对字符串进行切割的:String[]    split(String regex); 将符合正则表达式的字符串替换成我们想要的其他字符串:String  replaceAll(String  regex,String replacement) 2.下面介绍一下正则表

java web图片上传和文件上传实例_java

图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定要写属性enctype="multipart/form-data" 2.为了能保证文件能上传成功file控件的name属性值要和你提交的控制层变量名一致, 例如空间名是file那么你要在后台这样定义 private File file; //file控件名 private String fileContentType;//图

Java中用内存映射处理大文件的实现代码_java

在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验. package test; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOExc

java读取文件字符集示例方法_java

复制代码 代码如下: public static String getCharset(File file) {        String charset = "GBK";        byte[] first3Bytes = new byte[3];        try {            boolean checked = false;            BufferedInputStream bis = new BufferedInputStream(       

java 正则表达式-这条java中的替换字符串的正则表达式是什么意思?能不能详细解释一下

问题描述 这条java中的替换字符串的正则表达式是什么意思?能不能详细解释一下 replaceAll("([^u4e00-u9fa5]{1})([^u4e00-u9fa5]{1})", "$2") 解决方案 在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能

Java正则表达式使用_正则表达式

一:抓取网页中的Email地址 利用正则表达式匹配网页中的文本 复制代码 代码如下: [\\w[.-]]+@[\\w[.-]]+\\.[\\w]+ 将网页内容分割提取 import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.regex.Matcher; import jav