1

我想以X(XXX)XXX-XXX这种格式获取电话号码,当我用谷歌搜索时,我找到PhoneNumberUtils.formatNumber()了但它以这种格式提供了号码,X-XXX-XXX-XXX所以我怎样才能从X(XXX)XXX-XXXfromat 中获取号码。

代码

holder.tv_vehicle.setText("Phone #: " + PhoneNumberUtils.formatNumber(data.getUserPhone()));
4

2 回答 2

0

如果您传递本地号码和 X-XXX-XXX-XXX 国际号码,PhoneNumberUtils.formatNumber将返回 (XXX)XXX-XXX,在您的情况下,您有 2 个解决方案:

  1. 删除国家代码然后解析电话号码

         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

  1. 使用这个库google/libphonenumber 来格式化国际电话号码。
private String getFormattedNumber(String phoneNumber) {
    
    PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
    
    Phonemetadata.NumberFormat numberFormat = new Phonemetadata.NumberFormat();
    
    numberFormat.pattern = "(\\d{3})(\\d{3})(\\d{4})";
    
    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

于 2021-09-18T23:59:29.373 回答
-1
holder.tv_vehicle.setText("Phone #: " + PhoneNumberUtils.formatNumber(data.getUserPhone()).replaceFirst("-", "(").replaceFirst("-", ")"));

您可以使用 replaceFirst() 插入 ( then ) 并转换它。我在这里写了一些应该可以工作的糟糕代码。如果我在自己的程序中执行此操作,我会将其制成一个执行此操作并返回更新字符串的函数。

于 2021-09-18T22:00:25.197 回答