如何在java中格式化转换后的电话号码?

时间:2015-04-19 06:10:01

标签: java string formatting switch-statement phone-number

我的程序会将字母数字电话号码转换为仅数字。例如1-800-FLOWERS到18003569377.但是,我正在尝试将输出格式化为1-800-356-9377。

到目前为止我的代码:

public static void main(String[] args) 
{
    System.out.println ("Enter phone number:");
    Scanner scanInput = new Scanner (System.in);
    String initialPhoneNumber;
    initialPhoneNumber = scanInput.nextLine ();

    initialPhoneNumber = initialPhoneNumber.toUpperCase();
    long convertedPhoneNumber = phoneNumber (initialPhoneNumber);

    System.out.println ("Converted: " + convertedPhoneNumber);

}

public static long phoneNumber (String initialPhoneNumber)
{
    long number = 0;
    int stringLength = initialPhoneNumber.length();

    for (int digitNum = 0 ; digitNum < stringLength ; digitNum++ )
    {
        char ch = initialPhoneNumber.charAt(digitNum);


        if (Character.isLetter(ch))
        {
            switch(ch)
            {
            case 'A' : case 'B' : case 'C' : number *= 10; number += 2; break;
            case 'D' : case 'E' : case 'F' : number *= 10; number += 3; break;
            case 'G' : case 'H' : case 'I' : number *= 10; number += 4; break;
            case 'J' : case 'K' : case 'L' : number *= 10; number += 5; break;
            case 'M' : case 'N' : case 'O' : number *= 10; number += 6; break;
            case 'P' : case 'Q' : case 'R' : case 'S' : number *= 10; number += 7; break;
            case 'T' : case 'U' : case 'V' : number *= 10; number += 8; break;
            case 'W' : case 'X' : case 'Y' : case 'Z' : number *= 10; number += 9; break;
            }
        }
        else if (Character.isDigit(ch))
        {
            number *= 10; number += Character.getNumericValue(ch);
        }   
    }
    return number;
}   

任何帮助都会有很大的帮助!

4 个答案:

答案 0 :(得分:0)

您可以使用StringBuilder

StringBuilder sb = new StringBuilder(
        String.valueOf(convertedPhoneNumber));
sb.insert(7, '-');
sb.insert(4, '-');
sb.insert(1, '-');

System.out.println("Converted: " + sb);

答案 1 :(得分:0)

最好将电话号码存储为字符串,但如果存储为整数,则可按以下步骤操作。您可以使用/ 10或/ 100或/ 1000 ...(整数除法)删除右侧的数字。您可以使用%10或%100或%1000 ...(余数/模数)在左侧删除数字。这些操作的某些组合将隔离您想要的数字。

答案 2 :(得分:0)

Strings 有标准格式方法。在这个例子中,我获取了子串并格式化为%s-%s-%s - %。

%s - 显示子串,首先%s是第一个子串,第二个%s是第二个子串等。

String number = "18003569377";
String formattedNumber = String.format("%s-%s-%s-%s", number.substring(0, 1), number.substring(1, 4), number.substring(4, 7),number.substring(7, 11));

有关 String.format 的更多详细信息,请阅读以下链接: http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html http://examples.javacodegeeks.com/core-java/lang/string/java-string-format-example/

答案 3 :(得分:0)

在主要方法中添加以下内容将解决您的问题。

long subString = (convertedPhoneNumber%10000000);    
String updatedStringPhone = initialPhoneNumber.substring(0,6)+subString/10000+"-"+subString%10000;

总体方法是:

public static void main(String[] args) 
{
    System.out.println ("Enter phone number:");
    Scanner scanInput = new Scanner (System.in);
    String initialPhoneNumber;
    initialPhoneNumber = scanInput.nextLine ();

    initialPhoneNumber = initialPhoneNumber.toUpperCase();
    long convertedPhoneNumber = phoneNumber (initialPhoneNumber);
    long subString = (convertedPhoneNumber%10000000);    
    String updatedStringPhone = initialPhoneNumber.substring(0,6)+subString/10000+"-"+subString%10000;
    System.out.println("Updated: "+updatedStringPhone);
    System.out.println ("Converted: " + convertedPhoneNumber);

}

描述: 转换为字符串并添加以下字符串。例如
“1-800-”
“356”
“ - ”
“9377”