Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用java格式化转换后的电话号码?_Java_String_Formatting_Switch Statement_Phone Number - Fatal编程技术网

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

如何用java格式化转换后的电话号码?,java,string,formatting,switch-statement,phone-number,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 initialPho

我的程序只将字母数字电话号码转换为数字。例如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;
}   
publicstaticvoidmain(字符串[]args)
{
System.out.println(“输入电话号码:”);
扫描仪扫描输入=新扫描仪(System.in);
字符串initialPhoneNumber;
initialPhoneNumber=scanInput.nextLine();
initialPhoneNumber=initialPhoneNumber.toUpperCase();
long convertedPhoneNumber=电话号码(initialPhoneNumber);
System.out.println(“转换:”+转换电话号码);
}
公共静态长phoneNumber(字符串initialPhoneNumber)
{
长数=0;
int stringLength=initialPhoneNumber.length();
对于(int-digitNum=0;digitNum
任何帮助都将不胜感激

您可以使用

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

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

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

字符串的标准格式方法。在本例中,我使用子字符串并将其格式化为%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的详细信息,请阅读以下链接:

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

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”

您能用几句话解释一下您的解决方案吗?这样的答案总是更有力。我认为这是一个非常简单的问题,答案非常简单,不需要额外的解释,但结果证明我错了。字符串有标准格式方法。在本例中,我使用了子字符串并将其格式化为%s-%s-%s-%s-显示子字符串,第一个%s是第一个子字符串,第二个%s是第二个子字符串等等。我编辑了我的答案并添加了链接以获取更多详细信息。根据经验,一定要解释答案。这对你来说可能是显而易见的,但对这个领域的新手来说可能不是。