2016-06-18 76 views
0

我一直堅持了一段時間。我需要忽略輸入的數字,空格和特殊字符,如$ ^%## &!和剛讀其他字母AZ,使用Character.isDigit & Character.isLetter ..我用兩種方法試過,但它並沒有爲我工作了..請諮詢..忽略數字,空格和讀取字符串輸入,使用Character.isLetter&Character.isDigit

錯誤:
Img1

正常輸出(無空格和數字):
Img2

預期的輸出應該是438-5626,甚至當我進入123 $ @ GetLoan。他們應該忽略的前幾個字符「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

請不要使用截圖顯示錯誤消息,在這個問題說明正常輸入。 –

+1

也告訴它如何不工作,什麼是預期的輸出和什麼是輸入。 –

回答

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

提到固定的問題
+0

嗨krzyk,感謝您的快速回復..它真的沒有忽略數字,但它沒有從g開始讀取... 123被認爲是char0,1,2 ...我需要第一個字符開始於'g'... –

+0

答案几乎是正確的。上半部分很棒,但如果你只在'isLetter(phoneDigit)'爲真時增加'i',那麼如果遇到非字母,你將永遠循環。你需要'for(int i = 0,count = 0; i Andreas

+0

嗨安德烈亞斯,謝謝你的幫助。我試過了,輸出幾乎是正確的!對於連字符( - )我把一個If語句,如果(i == 3){println(「 - 」)}但他們認爲1,2,3是char 0,1,2 ..![https: //postimg.org/image/m9x5z3bif/] –