【问题标题】:How to remove country code , When Pick Phone Number from contacts从联系人中选择电话号码时如何删除国家代码
【发布时间】:2017-08-03 06:16:20
【问题描述】:

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

例如:+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();
}
}

【问题讨论】:

  • @IntelliJAmiya 这仅适用于国家代码为三位数的国家/地区。美国有 1 个,很多国家有 2 个……
  • 没有说所有电话号码都必须有国家代码(在联系人列表中)。但是,您可以通过查找“+”来检查这一点,然后删除它后面的数字(直到第一个空格)。
  • @PeterAbolins 确实

标签: java android telephonymanager


【解决方案1】:

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

首先,将此行添加到您的 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
}

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

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

【讨论】:

    【解决方案2】:

    您可以使用startsWith()

    此方法有两种变体,并测试字符串是否以 指定前缀开始指定索引或默认在 开始。

    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);
    }
    

    【讨论】:

    • 谢谢。但是您的解决方案是删除前 4 位数字。我从你的回答中得到了那个解决方案 例如:+917854129856 它会给出 54129856。当我问的时候,这不是完美的解决方案。我需要得到 7854129845
    • @venkateshwari 很高兴为您提供帮助。继续前进。
    【解决方案3】:

    我只是简单地扩展答案,如果您不想使用任何库,那么您可以这样做。为了匹配任何前缀,并且由于某些国家/地区可能共享部分相同的前缀(例如 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;
        }
    

    【讨论】:

      【解决方案4】:

      试试这个....

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          使用此功能希望对您有所帮助:

          public String phoeNumberWithOutCountryCode(String phoneNumberWithCountryCode) {
                  Pattern complie = Pattern.compile(" ");
                  String[] phonenUmber = complie.split(phoneNumberWithCountryCode);
                  Log.e("number is", phonenUmber[1]);
                  return phonenUmber[1];
              }
          

          【讨论】:

          • 我有像 +911234567890 这样的电话号码,我需要删除 +91 代码。在另一种模式中,我有 +91 1234 4567 - 897 如果我使用上面的代码目标只得到 1234 号码,我需要喜欢 12344567897
          【解决方案7】:
          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());
          }
          

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

          【讨论】:

          • 欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
          【解决方案8】:

          使用库 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 ", "" );

          【讨论】:

          • 还有其他答案提供了 OP 的问题,它们是前段时间发布的。在发布see: How do I write a good answer? 的答案时,请确保添加新的解决方案或更好的解释,尤其是在回答较老的问题时。
          猜你喜欢
          • 2017-08-27
          • 1970-01-01
          • 2011-12-07
          • 1970-01-01
          • 2018-01-08
          • 2012-06-13
          • 2018-06-18
          • 1970-01-01
          • 2019-04-02
          相关资源
          最近更新 更多