如何在 java 中格式化转换后的 phone 数字?

How to format a converted phone number in java?

我的程序仅将字母数字 phone 数字转换为数字。例如 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;
}   

如有任何帮助,我们将不胜感激!

你可以使用 StringBuilder 之类的东西

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

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

最好将 phone 数字存储为字符串,但如果存储为整数,则可以按以下方式进行。您可以使用 /10 或 /100 或 /1000 ...(整数除法)删除右侧的数字。您可以使用 % 10 或 % 100 或 % 1000 ... (remainder/modulus) 删除左侧的数字。这些操作的某种组合将隔离您想要的数字。

字符串的标准格式化方法。在此示例中,我采用了子字符串并将其格式化为 %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/

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

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”