我想以X(XXX)XXX-XXX
这种格式获取电话号码,当我用谷歌搜索时,我找到PhoneNumberUtils.formatNumber()
了但它以这种格式提供了号码,X-XXX-XXX-XXX
所以我怎样才能从X(XXX)XXX-XXX
fromat 中获取号码。
代码
holder.tv_vehicle.setText("Phone #: " + PhoneNumberUtils.formatNumber(data.getUserPhone()));
我想以X(XXX)XXX-XXX
这种格式获取电话号码,当我用谷歌搜索时,我找到PhoneNumberUtils.formatNumber()
了但它以这种格式提供了号码,X-XXX-XXX-XXX
所以我怎样才能从X(XXX)XXX-XXX
fromat 中获取号码。
代码
holder.tv_vehicle.setText("Phone #: " + PhoneNumberUtils.formatNumber(data.getUserPhone()));
如果您传递本地号码和 X-XXX-XXX-XXX 国际号码,PhoneNumberUtils.formatNumber将返回 (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
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
holder.tv_vehicle.setText("Phone #: " + PhoneNumberUtils.formatNumber(data.getUserPhone()).replaceFirst("-", "(").replaceFirst("-", ")"));
您可以使用 replaceFirst() 插入 ( then ) 并转换它。我在这里写了一些应该可以工作的糟糕代码。如果我在自己的程序中执行此操作,我会将其制成一个执行此操作并返回更新字符串的函数。