2014-01-21 10 views
8

Ich habe eine Nummer, die ich als Telefonnummer formatieren muss. Wenn ich das tueAndroid: Wie formatiere ich Nummer als Telefon mit Klammern

PhoneNumberUtils.formatNumber(numStr); 

Dann bekomme ich

888-555-1234 

Aber was muss ich bekommen ist

(888) 555-1234 

Wie kann ich die zweite bekommen? Gibt es einen Standard-Android-Weg?

+0

sind nur Sie nordamerikanischen Zahlen Targeting? –

Antwort

15

Wenn Sie das Land kennen, für das Sie es tun möchten, können Sie die Open-Source-Bibliothek libphonenumber von Google verwenden. Hier ist, wie Sie es formatieren können:

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

Wenn Sie nicht über das Land wissen dann für numberStr Verwendung E.164 format phone number und anstelle der Verwendung null Ländercode.

3

Wenn Sie den String "888-555-1234" haben - von PhoneNumberUtils.formatNumber(numStr); verwenden Sie dies einfach tun können:

String numStr = "888-555-1234"; 

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

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

Dies ist jedoch hart codiert. Sie müssen sicherstellen, dass der String vor der Ausführung volle 10 Ziffern hatte.

7

Ich weiß nicht, ob Sie gefunden haben, wonach Sie gesucht haben, aber ich habe am Ende eine kleine Methode geschrieben, die die Länge einer Zeichenfolge hat (da die Telefonnummern von einem Webservice kommen und eine Vielzahl von sein können Formate). Ich glaube, es sollte funktionieren (bisher waren alle meine Testfälle bei den ersten beiden Optionen - habe die anderen beiden noch nicht getestet).

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