使用Character.isLetter&amp ;;忽略数字,空格和读取字符串输入。 Character.isDigit

时间:2016-06-18 05:33:49

标签: java string if-statement character letter

我已经被困了一段时间了。我需要忽略输入的数字,空格和特殊字符,如$ ^%##&!并使用Character.isDigit&读取其他字母a-z。 Character.isLetter ..我尝试过使用这两种方法,但它并没有为我工作..请指教..

错误:
Img1

正常输出(不含空格和数字):
Img2

即使我输入了123 $ @ GetLoan,预期输出也应该是438-5626。他们应该忽略前几个字符' 123 $ @'并且只读GetLoan ..

完整问题:编写一个程序,提示用户输入以字母表示的电话号码,并以数字形式输出相应的电话号码。如果用户输入的字母超过七个,则只处理前七个字母。在第三个数字后输出 - (连字符)。允许用户同时使用大写和小写字母以及单词之间的空格。

public class Question3 {

public static void main(String[] args) {

    String letters;
    char phoneDigit;

    Scanner kb = new Scanner(System.in);

    System.out.println("Enter letters : ");
    letters = kb.next();

    for (int i = 0; i < 7; i++) {

        phoneDigit = letters.charAt(i);

        if (Character.isLetter(phoneDigit) == true) {

            if (i == 3) {
                System.out.println("-");
            } //If 

            if (phoneDigit >= 'A' && phoneDigit <= 'C'
                    || phoneDigit >= 'a' && phoneDigit <= 'c') {

                System.out.println("2");

            } else if (phoneDigit >= 'D' && phoneDigit <= 'F'
                    || phoneDigit >= 'd' && phoneDigit <= 'f') {

                System.out.println("3");

            } else if (phoneDigit >= 'G' && phoneDigit <= 'I'
                    || phoneDigit >= 'g' && phoneDigit <= 'i') {

                System.out.println("4");

            } else if (phoneDigit >= 'J' && phoneDigit <= 'L'
                    || phoneDigit >= 'j' && phoneDigit <= 'l') {

                System.out.println("5");

            } else if (phoneDigit >= 'M' && phoneDigit <= 'O'
                    || phoneDigit >= 'm' && phoneDigit <= 'o') {

                System.out.println("6");

            } else if (phoneDigit >= 'P' && phoneDigit <= 'S'
                    || phoneDigit >= 'p' && phoneDigit <= 's') {

                System.out.println("7");

            } else if (phoneDigit >= 'T' && phoneDigit <= 'V'
                    || phoneDigit >= 't' && phoneDigit <= 'v') {

                System.out.println("8");

            } else if (phoneDigit >= 'W' && phoneDigit <= 'Z'
                    || phoneDigit >= 'W' && phoneDigit <= 'z') {

                System.out.println("9");
            } // If
        } // If
    } // For loop

} //PSVM

1 个答案:

答案 0 :(得分:1)

下面的片段可能是问题所在:

for (int i = 0; i < 7; i++) {
    phoneDigit = letters.charAt(i);
    if (Character.isLetter(phoneDigit) == true) {

您前7个字符,只打印字母。因此,对于输入字符串123getloan,您将迭代123getl,然后isLetter将拒绝123,因此您的程序稍后将只处理getl

要迭代只有7个字母,只有当给定的字符是字母时才需要将其更改为i。通过以下做法:

int i = 0;
for (char phoneDigit : letters.toCharArray()) {
    if (Character.isLetter(phoneDigit)) {
        i++;

        // other ifs here

        if (i == 3) {
            System.out.println("-");
        }
    }
    if (i >= 7) {
        break;
    }
}

编辑:修复了@Andreas提到的问题