web-dev-qa-db-ja.com

android:括弧付きの電話として番号をフォーマットするにはどうすればよいですか

電話番号としてフォーマットする必要のある番号があります。私が行った場合

 PhoneNumberUtils.formatNumber(numStr);

それから私は得る

888-555-1234

しかし、私が取得する必要があるのは

(888) 555-1234

2番目のものを入手するにはどうすればよいですか?標準のAndroid方法はありますか?

11
user3093402

やりたい国がわかっている場合は、Googleのオープンソースライブラリ libphonenumber を使用できます。フォーマットする方法は次のとおりです。

String numberStr = "8885551234"
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
  PhoneNumber numberProto = phoneUtil.parse(numberStr, "US");
  //Since you know the country you can format it as follows:
  System.out.println(phoneUtil.format(numberProto, PhoneNumberFormat.NATIONAL));
} catch (NumberParseException e) {
  System.err.println("NumberParseException was thrown: " + e.toString());
}

国がわからない場合は、numberStrE.164形式の電話番号 を使用し、国コードの代わりにnullを使用します。

17
Shobhit Puri

探しているものが見つかったかどうかはわかりませんが、文字列の長さをとる小さなメソッドを作成することになりました(取得する電話番号は、Webサービスから取得され、さまざまな形式である可能性があるため)。私はそれがうまくいくはずだと信じています(これまでのところ、私のテストケースはすべて最初の2つのオプションを使用しており、他の2つはまだテストしていません)。

public static String FormatStringAsPhoneNumber(String input) {
    String output;
    switch (input.length()) {
        case 7:
            output = String.format("%s-%s", input.substring(0,3), input.substring(3,7));
            break;
        case 10:
            output = String.format("(%s) %s-%s", input.substring(0,3), input.substring(3,6), input.substring(6,10));
            break;
        case 11:
            output = String.format("%s (%s) %s-%s", input.substring(0,1) ,input.substring(1,4), input.substring(4,7), input.substring(7,11));
            break;
        case 12:
            output = String.format("+%s (%s) %s-%s", input.substring(0,2) ,input.substring(2,5), input.substring(5,8), input.substring(8,12));
            break;
        default:
            return null;
    }
    return output;
}
9
Sal Aldana

あなたは単にこれを使用して、あなたが望むようになります:

new PhoneNumberFormattingTextWatcher()

またはこのURLを見てください:

http://developer.Android.com/reference/Android/telephony/PhoneNumberFormattingTextWatcher.html

4
Aneh Thakur

文字列_"888-555-1234"_がある場合-PhoneNumberUtils.formatNumber(numStr);を使用すると、次のように簡単に実行できます。

_String numStr = "888-555-1234";

numStr = "(" + numStr.substring(0,3) + ") " + numStr.substring(4);

System.out.print(numStr); // (888) 555-1234
_

ただし、これはハードコーディングされています。その前に、文字列が完全に10桁であることを確認する必要があります。

3

正規表現を使用してみてください。 これ あなたを助けます。私に関しては、私はこれを使用します:

                        var result = "+1 888-555-1234"


                        if (Pattern.compile("^\\+[\\d]+\\s[\\d]{1,3}\\s[\\d]+").matcher(result).find()) {
                            result = result.replaceFirst(" ", "(").replaceFirst(" ", ")").replace(" ","-")
                        }

                        if(Pattern.compile("^\\+[\\d]+\\s[\\d]{1,3}-[\\d]+").matcher(result).find()){
                            result = result.replaceFirst(" ", "(").replaceFirst("-", ")")
                        }
                        Timber.d("$result")

出力:+1(888)555-1234

0
Serg Burlaka