0

I have an XML list of country codes and their corresponding countries ready to use, but first I need to separate them from the phone numbers. Is there an easy way to do this in the Android API?

Friso
  • 2,328
  • 9
  • 36
  • 72
  • Show an example of the data format you're working with – darnmason Nov 20 '14 at 15:24
  • Country codes aren't in a consistent length, or number of spaces. You have to come up with a methodology based on the specifics of the situation (for example US is just '1', but the DR is '1 809' - so you cant just take the first set of digits until a space is found.) It shouldn't be too difficult though. Is the country name in a consistent format? (eg 'US' will always be US and not 'United States') – wahwahwah Nov 20 '14 at 15:43

4 Answers4

2

I've used ridsatrio's answer with an older question here

I'm getting the country code out of the string array below it with the following class:

import android.widget.TextView;

/**
 * Created by Friso on 14/11/21.
 */
public final class PhoneFunctions {
    private static PhoneFunctions instance;

    private PhoneFunctions(){}

    public static PhoneFunctions getInstance() {
        if (instance == null) {
            instance = new PhoneFunctions();
        }

        return instance;
    }

    public String getCountry(String[] argStringArray, TextView argText){
        String country="";

        if (argText.getText().toString().length() >= 4){
            for(int i=0;i<argStringArray.length;i++){
                String[] g=argStringArray[i].split(",");
                if(g[0].equals(getFirstFourChar(argText))){
                    country=g[1];
                    break;
                }
                if (g[0].equals(getFirstThreeChar(argText))){
                    country=g[1];
                    break;
                }
                if (g[0].equals(getFirstTwoChar(argText))){
                    country=g[1];
                    break;
                }
            }
        }

        return country;
    }

    public String getFirstFourChar(TextView argText){
        String threeChar;
        String text = argText.getText().toString();
        threeChar = text.substring(0,4);

        return threeChar;
    }

    public String getFirstThreeChar(TextView argText){
        String twoChar;
        String text = argText.getText().toString();
        twoChar = text.substring(0,3);

        return twoChar;
    }

    public String getFirstTwoChar(TextView argText){
        String oneChar;
        String text = argText.getText().toString();
        oneChar = text.substring(0,2);

        return oneChar;
    }
}

The country codes consist of 1-3 numbers and because this app had to have + string at the beginning of the phone number I thought it faster to just add a + to codes in the string array that I'm comparing to instead of adding more code to separate the +.

<string-array name="CountryCodes" >
        <item>+93,AF</item>
        <item>+355,AL</item>
        <item>+213,DZ</item>
        <item>+376,AD</item>
        <item>+244,AO</item>
        <item>+672,AQ</item>
        <item>+54,AR</item>
        <item>+374,AM</item>
        <item>+297,AW</item>
        <item>+61,AU</item>
        <item>+43,AT</item>
        <item>+994,AZ</item>
        <item>+973,BH</item>
        <item>+880,BD</item>
        <item>+375,BY</item>
        <item>+32,BE</item>
        <item>+501,BZ</item>
        <item>+229,BJ</item>
        <item>+975,BT</item>
        <item>+591,BO</item>
        <item>+387,BA</item>
        <item>+267,BW</item>
        <item>+55,BR</item>
        <item>+673,BN</item>
        <item>+359,BG</item>
        <item>+226,BF</item>
        <item>+95,MM</item>
        <item>+257,BI</item>
        <item>+855,KH</item>
        <item>+237,CM</item>
        <item>+1,CA</item>
        <item>+238,CV</item>
        <item>+236,CF</item>
        <item>+235,TD</item>
        <item>+56,CL</item>
        <item>+86,CN</item>
        <item>+61,CX</item>
        <item>+61,CC</item>
        <item>+57,CO</item>
        <item>+269,KM</item>
        <item>+242,CG</item>
        <item>+243,CD</item>
        <item>+682,CK</item>
        <item>+506,CR</item>
        <item>+385,HR</item>
        <item>+53,CU</item>
        <item>+357,CY</item>
        <item>+420,CZ</item>
        <item>+45,DK</item>
        <item>+253,DJ</item>
        <item>+670,TL</item>
        <item>+593,EC</item>
        <item>+20,EG</item>
        <item>+503,SV</item>
        <item>+240,GQ</item>
        <item>+291,ER</item>
        <item>+372,EE</item>
        <item>+251,ET</item>
        <item>+500,FK</item>
        <item>+298,FO</item>
        <item>+679,FJ</item>
        <item>+358,FI</item>
        <item>+33,FR</item>
        <item>+689,PF</item>
        <item>+241,GA</item>
        <item>+220,GM</item>
        <item>+995,GE</item>
        <item>+49,DE</item>
        <item>+233,GH</item>
        <item>+350,GI</item>
        <item>+30,GR</item>
        <item>+299,GL</item>
        <item>+502,GT</item>
        <item>+224,GN</item>
        <item>+245,GW</item>
        <item>+592,GY</item>
        <item>+509,HT</item>
        <item>+504,HN</item>
        <item>+852,HK</item>
        <item>+36,HU</item>
        <item>+91,IN</item>
        <item>+62,ID</item>
        <item>+98,IR</item>
        <item>+964,IQ</item>
        <item>+353,IE</item>
        <item>+44,IM</item>
        <item>+972,IL</item>
        <item>+39,IT</item>
        <item>+225,CI</item>
        <item>+81,JP</item>
        <item>+962,JO</item>
        <item>+7,KZ</item>
        <item>+254,KE</item>
        <item>+686,KI</item>
        <item>+965,KW</item>
        <item>+996,KG</item>
        <item>+856,LA</item>
        <item>+371,LV</item>
        <item>+961,LB</item>
        <item>+266,LS</item>
        <item>+231,LR</item>
        <item>+218,LY</item>
        <item>+423,LI</item>
        <item>+370,LT</item>
        <item>+352,LU</item>
        <item>+853,MO</item>
        <item>+389,MK</item>
        <item>+261,MG</item>
        <item>+265,MW</item>
        <item>+60,MY</item>
        <item>+960,MV</item>
        <item>+223,ML</item>
        <item>+356,MT</item>
        <item>+692,MH</item>
        <item>+222,MR</item>
        <item>+230,MU</item>
        <item>+262,YT</item>
        <item>+52,MX</item>
        <item>+691,FM</item>
        <item>+373,MD</item>
        <item>+377,MC</item>
        <item>+976,MN</item>
        <item>+382,ME</item>
        <item>+212,MA</item>
        <item>+258,MZ</item>
        <item>+264,NA</item>
        <item>+674,NR</item>
        <item>+977,NP</item>
        <item>+31,NL</item>
        <item>+599,AN</item>
        <item>+687,NC</item>
        <item>+64,NZ</item>
        <item>+505,NI</item>
        <item>+227,NE</item>
        <item>+234,NG</item>
        <item>+683,NU</item>
        <item>+850,KP</item>
        <item>+47,NO</item>
        <item>+968,OM</item>
        <item>+92,PK</item>
        <item>+680,PW</item>
        <item>+507,PA</item>
        <item>+675,PG</item>
        <item>+595,PY</item>
        <item>+51,PE</item>
        <item>+63,PH</item>
        <item>+870,PN</item>
        <item>+48,PL</item>
        <item>+351,PT</item>
        <item>+1,PR</item>
        <item>+974,QA</item>
        <item>+40,RO</item>
        <item>+7,RU</item>
        <item>+250,RW</item>
        <item>+590,BL</item>
        <item>+685,WS</item>
        <item>+378,SM</item>
        <item>+239,ST</item>
        <item>+966,SA</item>
        <item>+221,SN</item>
        <item>+381,RS</item>
        <item>+248,SC</item>
        <item>+232,SL</item>
        <item>+65,SG</item>
        <item>+421,SK</item>
        <item>+386,SI</item>
        <item>+677,SB</item>
        <item>+252,SO</item>
        <item>+27,ZA</item>
        <item>+82,KR</item>
        <item>+34,ES</item>
        <item>+94,LK</item>
        <item>+290,SH</item>
        <item>+508,PM</item>
        <item>+249,SD</item>
        <item>+597,SR</item>
        <item>+268,SZ</item>
        <item>+46,SE</item>
        <item>+41,CH</item>
        <item>+963,SY</item>
        <item>+886,TW</item>
        <item>+992,TJ</item>
        <item>+255,TZ</item>
        <item>+66,TH</item>
        <item>+228,TG</item>
        <item>+690,TK</item>
        <item>+676,TO</item>
        <item>+216,TN</item>
        <item>+90,TR</item>
        <item>+993,TM</item>
        <item>+688,TV</item>
        <item>+971,AE</item>
        <item>+256,UG</item>
        <item>+44,GB</item>
        <item>+380,UA</item>
        <item>+598,UY</item>
        <item>+1,US</item>
        <item>+998,UZ</item>
        <item>+678,VU</item>
        <item>+39,VA</item>
        <item>+58,VE</item>
        <item>+84,VN</item>
        <item>+681,WF</item>
        <item>+967,YE</item>
        <item>+260,ZM</item>
        <item>+263,ZW</item>
    </string-array>
Community
  • 1
  • 1
Friso
  • 2,328
  • 9
  • 36
  • 72
1

Java's String.substring() might be useful for this use-case:

yourString.substring(int beginIndex, int endIndex);

You might have to take out the XML list first, substring the first 3 numbers of your user's input, then compare it with the list's entries.

Hadi Satrio
  • 4,272
  • 2
  • 24
  • 45
1

Please checkout libphonenumber; https://code.google.com/p/libphonenumber/.

This is Google's common Java, C++ and Javascript library for parsing, formatting, storing and validating international phone numbers. The Java version is optimized for running on smartphones, and is used by the Android framework since 4.0 (Ice Cream Sandwich).

Sameer Khan
  • 637
  • 6
  • 15
-1

you can split your mobile number by checking is started with "+" sign and Phone number should have length 10.

void splitMobilenumberMethod(){
    String phoneNumb = MOBILE_NUMBER_TO_SPLIT;
    String ext = "", phoneN = "";
    if (phoneNumb.startsWith("+") || phoneNumb.length() > 10) {
        ext=phoneNumb.substring(0, 3);
        phoneN=phoneNumb.substring(3);
     } else {
        ext = "";
        phoneN = phoneNumb;
     }
     showSelectedPhoneDialog(ext, phoneN);
}


void showSelectedPhoneDialog(String ext, String phone) {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
    alertDialog.setTitle("Verify Phone Number");
    LinearLayout layout = new LinearLayout(context);
    layout.setOrientation(LinearLayout.HORIZONTAL);
    layout.setGravity(View.TEXT_ALIGNMENT_CENTER);
    final EditText extEdit = new EditText(context);
    final EditText phoneEdit = new EditText(context);
    extEdit.setHint("Country");
    phoneEdit.setHint("Mobile Number");
    layout.addView(extEdit);
    layout.addView(phoneEdit);
    extEdit.setText(ext);
    phoneEdit.setText(phone);
    alertDialog.setView(layout);

    alertDialog.setIcon(R.drawable.ic_message);
    alertDialog.setPositiveButton("Done", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // do if split is correct or after make it corrent manually by user
        }
    });
    alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {

            dialog.cancel();
        }
    });

    alertDialog.show();
}
adiga
  • 34,372
  • 9
  • 61
  • 83
Hemant Sharma
  • 259
  • 5
  • 14
  • 4
    I have removed the site from the answer as it adds no additional details. [Promoting your personal blog is considered as spam on SO](https://meta.stackoverflow.com/questions/273209/is-it-acceptable-to-promote-your-own-blog). You *must* [disclose your affiliation](https://stackoverflow.com/help/promotion) in your answers if it's your site. – adiga Mar 05 '19 at 08:27