如何删除国家代码,从联系人中选择 Phone 号码时

How to remove country code , When Pick Phone Number from contacts

我对那部分有疑问。当我从联系人列表中选择 phone 号码时,如何删除国家代码?

例如:+91 999999999 而不是 9999999999 或 +020 9696854549 而不是 9696854549 谁能知道我的问题的答案。请给出这个问题的解决方案

我在这里附上了我的代码和图片。

     private void contactPicked(Intent data) {
    Cursor cursor = null;
    try {
    String phoneNo = null ;
    // getData() method will have the Content Uri of the selected contact
    Uri uri = data.getData();
    //Query the content uri
    cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    // column index of the phone number
    int  phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER
  phoneNo = cursor.getString(phoneIndex);
   String phoneNumber = phoneNo.replaceAll(" ","");
   mobile_et.setText(phoneNumber);
} catch (Exception e) {
    e.printStackTrace();
}
}

我的英文很差,但我会尽力回答你的问题。

首先,将此行添加到您的 build.gradle

compile 'com.googlecode.libphonenumber:libphonenumber:8.7.0'

下面是 kotlin 编写的示例

fun deleteCountry(phone: String) : String{
    val phoneInstance = PhoneNumberUtil.getInstance()
    try {
        val phoneNumber = phoneInstance.parse(phone, null)
        return phoneNumber?.nationalNumber?.toString()?:phone
    }catch (_ : Exception) {
    }
    return phone
}

如果 phone 号码不是以 '+' 开头,后跟国家呼叫代码,那么您应该传递地区信息,例如:

val phoneNumber = phoneInstance.parse(phone, "CN")

您可以使用 startsWith()

This method has two variants and tests if a string starts with the specified prefix beginning a specified index or by default at the beginning.

if(phoneNumber.startsWith("+"))
{
    if(phoneNumber.length()==13)
    {
    String str_getMOBILE=phoneNumber.substring(3);
    mobile_et.setText(str_getMOBILE);
    }
    else if(phoneNumber.length()==14)
    {
    String str_getMOBILE=phoneNumber.substring(4);
    mobile_et.setText(str_getMOBILE);
    }


}
else
{
 mobile_et.setText(phoneNumber);
}

它适用于所有实例。你不用关心国家代码是多少位

String get_Mo = phoneNumber.substring(phoneNumber.lastIndexOf(' ')+1));

使用这个功能希望它能帮到你:

public String phoeNumberWithOutCountryCode(String phoneNumberWithCountryCode) {
        Pattern complie = Pattern.compile(" ");
        String[] phonenUmber = complie.split(phoneNumberWithCountryCode);
        Log.e("number is", phonenUmber[1]);
        return phonenUmber[1];
    }
String Trimmed = s.toString().trim();
if(Trimmed.length() > 10){
char[] number = Trimmed.toCharArray();
int extra;
int dif = Trimmed.length() - 10 ;
for(int i = dif; i < Trimmed.length() ; i++){
    extra = i-dif;
    number[extra] = number[i];
}
for (int i = 10 ; i < Trimmed.length() ; i++){
    number[i]=' ';
}
String finalNumber = String.valueOf(number);
MobileNumberET.setText(finalNumber.trim());
}

//将其粘贴到您的文本更改侦听器中

使用图书馆 https://groups.google.com/forum/?hl=en&fromgroups#!forum/libphonenumber-discuss

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
// phone must begin with '+'
PhoneNumber numberProto = phoneUtil.parse(phone, "");
int countryCode = numberProto.getCountryCode();
} catch (NumberParseException e) {
System.err.println("NumberParseException was thrown: " + e.toString());
}

如果您想在移动设备上的特定 Sim 上执行一些额外功能,您可以使用以下许多方法中的一些。 可能不是一个完美的解决方案,但我会尽力而为。 首先以编程方式获取国家代码:

TelephonyManager tm = (TelephonyManager) 
this.getSystemService(Context.TELEPHONY_SERVICE);
//get the country iso from sim e.g US, NG, FR etc
String countryIso = tm.getSimCountryIso().toUpperCase():
//get countrycode from refegion returns the code e.g +123, +1, +23 etc. 
Int countryCode = 
phoneNumberUtil.getInstance().getCountryCodeForRegion(countryIso);

然后您可以使用您喜欢的方式将其删除,例如String PhoneNumber = phoneNo.replaceAll("countryCode ", "" );

我只是简单地扩展了答案,如果你不想使用任何库,那么你可以用这种方式来做。为了匹配任何前缀,并且由于某些国家/地区可能共享部分相同的前缀(例如 91 和 91-721),您可以按降序和大小将所有可能性添加到正则表达式中。

遵循此代码:

public static String PhoneNumberWithoutCountryCode(String phoneNumberWithCountryCode){//+91 7698989898
        Pattern compile = Pattern.compile("\+(?:998|996|995|994|993|992|977|976|975|974|973|972|971|970|968|967|966|965|964|963|962|961|960|886|880|856|855|853|852|850|692|691|690|689|688|687|686|685|683|682|681|680|679|678|677|676|675|674|673|672|670|599|598|597|595|593|592|591|590|509|508|507|506|505|504|503|502|501|500|423|421|420|389|387|386|385|383|382|381|380|379|378|377|376|375|374|373|372|371|370|359|358|357|356|355|354|353|352|351|350|299|298|297|291|290|269|268|267|266|265|264|263|262|261|260|258|257|256|255|254|253|252|251|250|249|248|246|245|244|243|242|241|240|239|238|237|236|235|234|233|232|231|230|229|228|227|226|225|224|223|222|221|220|218|216|213|212|211|98|95|94|93|92|91|90|86|84|82|81|66|65|64|63|62|61|60|58|57|56|55|54|53|52|51|49|48|47|46|45|44\D?1624|44\D?1534|44\D?1481|44|43|41|40|39|36|34|33|32|31|30|27|20|7|1\D?939|1\D?876|1\D?869|1\D?868|1\D?849|1\D?829|1\D?809|1\D?787|1\D?784|1\D?767|1\D?758|1\D?721|1\D?684|1\D?671|1\D?670|1\D?664|1\D?649|1\D?473|1\D?441|1\D?345|1\D?340|1\D?284|1\D?268|1\D?264|1\D?246|1\D?242|1)\D?");
        String number = phoneNumberWithCountryCode.replaceAll(compile.pattern(), "");
        //Log.e(tag, "number::_>" +  number);//OutPut::7698989898
        return number;
    }

试试这个....

                if(number.length()>10)
                {
                    int startidx=number.length()-10;
                    String getnumber=number.substring(startidx,number.length());
                    etEmerNumber.setText(getnumber);
                }
                else
                {
                    etEmerNumber.setText(number);
                }