java正則表達式的運用 java讀取文件並獲得德律風號碼。本站提示廣大學習愛好者:(java正則表達式的運用 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正則表達式應用加倍闇練。