2013-05-29 128 views
56

我有這樣的字符串:+33123456789(法國電話號碼)。我想在不知道國家的情況下提取國家代碼(+33)。例如,如果我有另一個國家的另一部手機,它應該可以工作。我使用谷歌圖書館https://code.google.com/p/libphonenumber/從電話號碼[libphonenumber]提取代碼國家

如果我知道這個國家,這是酷我能找到的國家代碼:

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); 
int countryCode = phoneUtil.getCountryCodeForRegion(locale.getCountry()); 

,但我沒有找到一個方法來解析字符串,不知道這個國家。

+0

[使用Android獲取電話國家/地區代碼]可能的重複(http://stackoverflow.com/questions/5402253/getting-telephone-country-code-with-android) – Simon

+0

參見http://stackoverflow.com/問題/ 2530377 /列表電話號碼國家代碼 – Simon

+1

第一個鏈接是基於電話國家代碼。但在我的情況下,我可以有一個字符串,這是一個法語電話號碼和英文電話。所以,如果我檢索當前的語言環境,我將有「EN」,但我的字符串將是一個法國國家代碼 – mrroboaat

回答

92

好吧,所以我加入了libphonenumber的谷歌組(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()); 
} 
+3

這個wackadoo瘋狂的圖書館是驚人的,比包含的PhoneNumberUtil's'庫在android – Aphex

+0

@aat好多了@aat你會告訴我如何在沒有使用countryISOCode的情況下工作(phoneUtil.parse(電話,「」);)您的回答,請回復 – Ash

+0

@Shweta如果您有任何問題,請將其發佈到SO – mrroboaat

-3

如果包含電話號碼的字符串總是以這種方式開始(+33或其他國家/地區代碼),則應使用正則表達式解析並獲取國家/地區代碼,然後使用該庫來獲取與該號碼關聯的國家/地區。

+2

這是行不通的,因爲國家代碼不總是2位數字。 – Simon

+0

它存在許多不同的國家代碼:[http://en.wikipedia.org/wiki/List_of_country_calling_codes](http://en.wikipedia.org/wiki/List_of_country_calling_codes) – mrroboaat

-1

在這裏您可以將電話號碼保存爲國際格式的電話號碼

internationalFormatPhoneNumber = phoneUtil.format(givenPhoneNumber, PhoneNumberFormat.INTERNATIONAL); 

它返回的電話號碼 國際格式+94 71 560 4888

所以我現在所得到的國家代碼這

String countryCode = internationalFormatPhoneNumber.substring(0,internationalFormatPhoneNumber.indexOf('')).replace('+', ' ').trim(); 

希望這將幫助你

+1

什麼是'internationalFormatPhoneNumber'數據類型和phoneUtil –

+1

給定的PhoneNumber參數不是一個字符串,它必須是一個已經解析過的電話號碼,你需要默認區域來生成 –

+0

@GilSH是給定的PhoneNumber而不是String,它是PhoneNumber對象。 –

-13

這裏有一個答案如何找到國碼,而無需使用第三方庫(如真正的開發者):

所有可用的國家代碼獲取列表,維基百科可以幫助這裏: https://en.wikipedia.org/wiki/List_of_country_calling_codes

解析每個數字是分支的樹結構中的數據。

遍歷你的樹數字,直到你在最後一個分支 - 這是你的國家代碼。

+7

我下調投票,因爲這個評論:「這是一個答案如何找到國家呼籲代碼沒有使用第三方庫(如同真正的開發者):「 爲什麼你認爲軟件取得進步?這是因爲人們不必每次重新發明輪子。 REAL開發人員使用第三方庫是因爲他/她聰明。 –

+2

您的個人意見不會讓我的回答不正確,是嗎?事實上,這是迄今爲止唯一正確和防彈的答案...是的,它不需要任何第三方軟件即可工作。如果您堅持使用第三方庫,歡迎您購買我的解決方案。 – Unobic

相關問題