输出应在前3位数后显示连字符( - ),然后在每4位数后显示连字符

时间:2018-01-27 07:47:26

标签: java

我有一项任务,但我无法完成这个问题。 以前我添加插入其他if(counter == 7){break;在计数器== 3之后但我已经删除了,因为问题说要处理用户想要的数字。

我不知道如何在前三位数短划线后添加计数每4位数字。

以下代码就是我所拥有的。

请尽可能帮助并向我解释。谢谢:)

import java.util.Scanner;

公共课题1 {

public static void main (String [] args)
{
    boolean notletter = false;
    Scanner console = new Scanner(System.in);
    String phoneletter = "";
    int counter = 0;

    System.out.print("Enter a phone number in letters only: ");
    String phoneNumber = console.nextLine();

    String phnum2 = phoneNumber.replaceAll(" ", "");

    for (int i = 0; i <= phnum2.length() - 1; i++) {

        if (!(Character.isLetter(phnum2.charAt(i)))) {
            notletter = true;

            break;
        }
        {

            switch (Character.toUpperCase(phnum2.charAt(i))) {
                case 'A':
                case 'B':
                case 'C':
                    phoneletter = phoneletter + "2";
                    break;
                case 'D':
                case 'E':
                case 'F':
                    phoneletter = phoneletter + "3";
                    break;
                case 'G':
                case 'H':
                case 'I':
                    phoneletter = phoneletter + "4";
                    break;
                case 'J':
                case 'K':
                case 'L':
                    phoneletter = phoneletter + "5";
                    break;
                case 'M':
                case 'N':
                case 'O':
                    phoneletter = phoneletter + "6";
                    break;
                case 'P':
                case 'Q':
                case 'R':
                case 'S':
                    phoneletter = phoneletter + "7";
                    break;
                case 'T':
                case 'U':
                case 'V':
                    phoneletter = phoneletter + "8";
                    break;
                case 'W':
                case 'X':
                case 'Y':
                case 'Z':
                    phoneletter = phoneletter + "9";
                    break;

            }
            counter++;

            if (counter ==3) {

                phoneletter = phoneletter + "-";


                }


            }


        }



    if (notletter == true) {
        System.out.println("Please indicate only alphabets");
    } else {
        System.out.println(phoneletter);
    }

}

}

1 个答案:

答案 0 :(得分:0)

这可以通过编辑代码末尾的if语句来完成:

if (counter ==3) {

    phoneletter = phoneletter + "-";


}

这里你已经检查了计数器是否为3。如果是,请添加连字符。接下来要做的是检查&#34;每4位数后的连字符&#34;。为此,我们可以检查counter - 3是4的倍数:

(counter - 3) % 4 == 0

然而,如果(输入长度​​ - 1)是4的倍数,这会使它在输出的末尾插入一个额外的-。所以我们不应该如果我们到达字符串的末尾,请添加连字符。这可以通过检查iphnom.length() - 1

来完成
i != phnom.length() - 1

如果我们将所有这些条件结合在一起,我们就会得到

if (counter == 3 || ((counter - 3) % 4 == 0 && i != phnom.length() - 1)) {

注意:这实际上可以使用正则表达式来完成,但由于这是作业,我怀疑这种方法是否会被接受。以下是使用正则表达式执行此操作的方法:

// phoneLetter is a string of digits without any hyphens
String result = phoneLetter.replaceAll("^\\d{3}|\\d{4}(?!$)", "$0-");