我有一项任务,但我无法完成这个问题。 以前我添加插入其他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);
}
}
}
答案 0 :(得分:0)
这可以通过编辑代码末尾的if语句来完成:
if (counter ==3) {
phoneletter = phoneletter + "-";
}
这里你已经检查了计数器是否为3。如果是,请添加连字符。接下来要做的是检查&#34;每4位数后的连字符&#34;。为此,我们可以检查counter - 3
是4的倍数:
(counter - 3) % 4 == 0
然而,如果(输入长度 - 1)是4的倍数,这会使它在输出的末尾插入一个额外的-
。所以我们不应该如果我们到达字符串的末尾,请添加连字符。这可以通过检查i
是phnom.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-");