获取美国格式的用户电话号码
Posted
技术标签:
【中文标题】获取美国格式的用户电话号码【英文标题】:Get user phone number in USA format 【发布时间】:2021-09-18 21:45:11 【问题描述】:我想以这种格式获取电话号码X(XXX)XXX-XXX
,当我用 Google 搜索时,我找到了PhoneNumberUtils.formatNumber()
,但它以这种格式提供了X-XXX-XXX-XXX
的号码,所以我如何才能从X(XXX)XXX-XXX
中获取号码。
代码
holder.tv_vehicle.setText("Phone #: " + PhoneNumberUtils.formatNumber(data.getUserPhone()));
【问题讨论】:
【参考方案1】:PhoneNumberUtils.formatNumber 将返回 (XXX)XXX-XXX 如果您传递本地号码和 X-XXX-XXX-XXX 国际号码,在您的情况下,您有 2 个解决方案:
删除国家代码然后解析电话号码
String phoneNumber = "+1-202-000-0000";
String code = result.substring(0,3);
String localNumber = result.replace(code,""); //202-555-0196
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
Log.i("result",code.replace("-","") + PhoneNumberUtils.formatNumber(localNumber , "US"));
else
Log.i("result",code.replace("-","") + PhoneNumberUtils.formatNumber(localNumber));
结果:+1(202) 000-0000
-
使用此库 google/libphonenumber 来格式化国际电话号码。
private String getFormattedNumber(String phoneNumber)
PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
Phonemetadata.NumberFormat numberFormat = new Phonemetadata.NumberFormat();
numberFormat.pattern = "(\\d3)(\\d3)(\\d4)";
numberFormat.format = "($1) $2-$3";
List<Phonemetadata.NumberFormat> newNumberFormats = new ArrayList<>();
newNumberFormats.add(numberFormat);
Phonenumber.PhoneNumber phoneNumberPN = null;
try
phoneNumberPN = phoneNumberUtil.parse(phoneNumber, Locale.US.getCountry());
phoneNumber = phoneNumberUtil.formatByPattern(phoneNumberPN, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL, newNumberFormats);
catch (NumberParseException e)
e.printStackTrace();
return phoneNumber;
getFormattedNumber("+12020000000");
结果:+1(202) 000-0000
【讨论】:
【参考方案2】:holder.tv_vehicle.setText("Phone #: " + PhoneNumberUtils.formatNumber(data.getUserPhone()).replaceFirst("-", "(").replaceFirst("-", ")"));
您可以使用 replaceFirst() 插入 ( then ) 并转换它。我在这里写了一些应该可以工作的糟糕代码。如果我在自己的程序中执行此操作,我会将其制成一个执行此操作并返回更新字符串的函数。
【讨论】:
这有点磨损,如果你要替换这么多,为什么还要首先使用 PhoneNumberUtils.formatNumber 这段代码运行良好但@DennisVA 是对的,那么PhoneNumberUtils.formatNumber
有什么用?
PhoneNumberUtils 可以为拨号器格式化,它也可以用于随机输入电话号码并将其转换为基本输入,以便您可以随意编辑它。如果您以标准方式获取所有数字输入,并且没有将它们放入拨号器,那么可能没有理由使用它。
@DriversSea 有什么干净的方法可以代替replaceFirst("-", "(").replaceFirst("-", ")")
以上是关于获取美国格式的用户电话号码的主要内容,如果未能解决你的问题,请参考以下文章