【问题标题】: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()));

【问题讨论】:

    标签: android phonenumberutils


    【解决方案1】:

    PhoneNumberUtils.formatNumber 将返回 (XXX)XXX-XXX 如果您传递本地号码和 X-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

    【讨论】:

      【解决方案2】:
      holder.tv_vehicle.setText("Phone #: " + PhoneNumberUtils.formatNumber(data.getUserPhone()).replaceFirst("-", "(").replaceFirst("-", ")"));
      

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

      【讨论】:

      • 这有点磨损,如果你要替换这么多,为什么还要首先使用 PhoneNumberUtils.formatNumber
      • 这段代码运行良好但@DennisVA 是对的,那么PhoneNumberUtils.formatNumber 有什么用?
      • PhoneNumberUtils 可以为拨号器格式化,它也可以用于随机输入电话号码并将其转换为基本输入,以便您可以随意编辑它。如果您以标准方式获取所有数字输入,并且没有将它们放入拨号器,那么可能没有理由使用它。
      • @DriversSea 有什么干净的方法可以代替replaceFirst("-", "(").replaceFirst("-", ")")
      猜你喜欢
      • 2010-10-14
      • 2011-08-16
      • 1970-01-01
      • 2011-05-22
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多