利用com.google.i18n.phonenumbers.PhoneNumberUtil获取手机国家地区区号

本文介绍如何在项目中引入并使用libphonenumber库,该库用于处理国际电话号码,包括获取不同国家的电话区号。通过Maven和Gradle的依赖配置,以及示例代码展示libphonenumber的使用方法。

pom中
        <dependency>
            <groupId>com.googlecode.libphonenumber</groupId>
            <artifactId>libphonenumber</artifactId>
            <version>8.0.0</version>
        </dependency>

build.gradle

    implementation 'com.googlecode.libphonenumber:libphonenumber:8.0.0'

 

 

 

    public static void main(String[] args) {

        String[] countries = Locale.getISOCountries();
        for (int i = 0; i < countries.length; i++)
        {
            String code=countries[i];
            Locale locale = new Locale("zh", code);
            String mDisplayName=locale.getDisplayName();
            mDisplayName=mDisplayName.substring(mDisplayName.indexOf("("),mDisplayName.indexOf(")"));
            System.out.println("+"+ PhoneNumberUtil.getInstance().getCountryCodeForRegion(code)      +"        "+mDisplayName);
        }

    }

 

package org.yqq.receive; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata; import com.google.i18n.phonenumbers.ShortNumberInfo; import java.util.*; import java.util.stream.Collectors; public class CountryCodeFetcher { public static void main(String[] args) { List<CountryInfo> countries = getAllCountryInfo(); // 按国家名称排序 countries.sort(Comparator.comparing(CountryInfo::getCountryName)); // 打印结果 System.out.println("国家总数: " + countries.size()); System.out.println("+------------+------------------------------+----------------+"); System.out.println("| 国家代码 | 国家名称 | 国际电话区号 |"); System.out.println("+------------+------------------------------+----------------+"); for (CountryInfo country : countries) { System.out.printf("| %-10s | %-28s | %-14s |\n", country.getCountryCode(), country.getCountryName(), "+" + country.getCountryCallingCode()); } System.out.println("+------------+------------------------------+----------------+"); // 导出为CSV exportToCsv(countries); } public static List<CountryInfo> getAllCountryInfo() { PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); ShortNumberInfo shortNumberInfo = ShortNumberInfo.getInstance(); // 获取所有支持的国家代码 Set<String> regionCodes = phoneUtil.getSupportedRegions(); return regionCodes.stream() .map(regionCode -> { try { // 获取国家元数据 PhoneMetadata metadata = phoneUtil.getMetadataForRegion(regionCode); // 获取国家名称 Locale locale = new Locale("", regionCode); String countryName = locale.getDisplayCountry(Locale.ENGLISH); // 获取国际电话区号 int countryCallingCode = metadata.getCountryCode(); // 获取示例号码 String exampleNumber = phoneUtil.getExampleNumber(regionCode).toString(); // 获取号码格式 String nationalFormat = phoneUtil.format( phoneUtil.getExampleNumber(regionCode), PhoneNumberUtil.PhoneNumberFormat.NATIONAL ); // 获取短号码支持信息 boolean supportsShortNumbers = shortNumberInfo.regionSupportsShortNumbers(regionCode); return new CountryInfo( regionCode, countryName, countryCallingCode, exampleNumber, nationalFormat, supportsShortNumbers ); } catch (Exception e) { System.err.println("Error processing region: " + regionCode); return null; } }) .filter(Objects::nonNull) .collect(Collectors.toList()); } public static void exportToCsv(List<CountryInfo> countries) { String csvHeader = "CountryCode,CountryName,CallingCode,ExampleNumber,NationalFormat,SupportsShortNumbers\n"; StringBuilder csvContent = new StringBuilder(csvHeader); for (CountryInfo country : countries) { csvContent.append(String.format("\"%s\",\"%s\",%d,\"%s\",\"%s\",%s\n", country.getCountryCode(), country.getCountryName(), country.getCountryCallingCode(), country.getExampleNumber(), country.getNationalFormat(), country.isSupportsShortNumbers() )); } // 保存到文件 try { java.nio.file.Files.write( java.nio.file.Paths.get("countries_info.csv"), csvContent.toString().getBytes() ); System.out.println("\nCSV文件已保存: countries_info.csv"); } catch (Exception e) { System.err.println("CSV保存失败: " + e.getMessage()); } } static class CountryInfo { private final String countryCode; private final String countryName; private final int countryCallingCode; private final String exampleNumber; private final String nationalFormat; private final boolean supportsShortNumbers; public CountryInfo(String countryCode, String countryName, int countryCallingCode, String exampleNumber, String nationalFormat, boolean supportsShortNumbers) { this.countryCode = countryCode; this.countryName = countryName; this.countryCallingCode = countryCallingCode; this.exampleNumber = exampleNumber; this.nationalFormat = nationalFormat; this.supportsShortNumbers = supportsShortNumbers; } // Getters public String getCountryCode() { return countryCode; } public String getCountryName() { return countryName; } public int getCountryCallingCode() { return countryCallingCode; } public String getExampleNumber() { return exampleNumber; } public String getNationalFormat() { return nationalFormat; } public boolean isSupportsShortNumbers() { return supportsShortNumbers; } } } 这个不对 getMetadataForRegion(java.lang.String)在com.google.i18n.phonenumbers.PhoneNumberUtil中不是公共的; 无法从外部程序包中对其进行访问 shortNumberInfo.regionSupportsShortNumbers(regionCode);方法regionSupportsShortNumbers不存在
最新发布
08-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值