Java 将电话号码(移动电话或陆路电话)拆分为国家代码、区号和号码

Java 将电话号码(移动电话或陆路电话)拆分为国家代码、区号和号码,java,parsing,Java,Parsing,我需要将电话号码(可以是移动电话或陆路电话)拆分为: 国家/地区拨号代码 区域代码 电话号码 示例: +923211234567将92 32x 1234567(移动) +92992123456将92992123456(陆线) 假设我有一个数据库,里面有所有国家的拨号代码、区号、移动国家代码、移动网络代码 问题是国家/地区拨号代码可以是1、2或3位数字。例如: 1适用于美国,92适用于巴基斯坦,或233适用于加纳 此外,区域和移动网络代码可以是2或3位数字。有什么想法吗?在拆分之前是否知道该号

我需要将电话号码(可以是移动电话或陆路电话)拆分为:

  • 国家/地区拨号代码
  • 区域代码
  • 电话号码
示例:

+923211234567
92 32x 1234567
(移动)
+92992123456
92992123456
(陆线)

假设我有一个数据库,里面有所有国家的拨号代码、区号、移动国家代码、移动网络代码

问题是国家/地区拨号代码可以是1、2或3位数字。例如:

1
适用于美国
92
适用于巴基斯坦,或
233
适用于加纳


此外,区域和移动网络代码可以是2或3位数字。有什么想法吗?

在拆分之前是否知道该号码是移动号码还是陆路号码?如果没有,则连数字的长度都可能不同。

您可以使用该库。

可以找到一个演示页面。

我已经看到了,但问题是phoneUtil.parse()需要国家代码…我没有国家代码,它只需要默认的国家代码,让用户输入或选择一个您认为最常见的号码。无法判断该号码是移动号码还是陆路号码…是的,其长度会有所不同,您可以看到示例
try {
// phone must begin with '+'
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber numberProto = phoneUtil.parse("your number", "");
int countryCode = numberProto.getCountryCode();
long nationalNumber = numberProto.getNationalNumber();
Log.i("code", "code " + countryCode);
Log.i("code", "national number " + nationalNumber);
} catch (NumberParseException e) {
System.err.println("NumberParseException was thrown: " + e.toString());
}