2013-08-25 132 views
1

我是一名java初學者,我的問題看起來有點可怕,儘管幫助會很贊!字符串,如何識別字母

不管怎麼說,我的問題以及書中的問題是:

「寫的是提示用戶從阿爾法賭注提供單個字符的程序打印元音或輔音,根據用戶輸入如果。用戶輸入不是字母(a與z或A與Z之間),或者是長度大於1的字符串,則輸出錯誤信息。將不勝感激! 謝謝!

+2

使用字母範圍來比較'(input> ='a'&& input <='z')|| (input> ='A'&& input <='Z')'用於英文標準字母集 –

+3

請嘗試一下並帶着具體問題來這裏... –

+1

[Character.isLetter](http://docs.oracle.com /javase/7/docs/api/java/lang/Character.html#isLetter(char)) – DaoWen

回答

0

簡單的會是這樣的

public static final int VOWEL = 0; 
public static final int CONSONANT = 1; 
public static final int OTHER = 2; 

public int getCharType(char c) { 
    switch(c) { 
    case 'a': 
    case 'A': 
    case 'e': 
     ... 
     return VOWEL; 

    case 'b': 
    case 'B': 
    case 'c': 
     ... 
     return CONSONANT; 

    default: 
     return OTHER; 
    } 
} 
+2

「簡單」,如「不編譯」? – Mat

+2

@Mat - 顯然,它不是*意圖*編譯。 –

3

在大多數常見語言中輸入的是ACII。看看這個表是什麼樣的,看看這張表 ​​

當你收到用戶發來的一封信時,你會得到一個char。這個字符包含一個字母數字,就ASCII表而言,這意味着如果你的字符中有75個字符,你現在有一個'K'

,要知道你是否收到一封信,你只需要做的是:

char c;// Your char 

Scanner scan = new Scanner (System.in); 
c = scan.nextChar(); 

if((c>= 'a' && c<= 'z') || (c>= 'A' && c<= 'Z')) 
{ 
    // you got a letter 
} 
else 
{ 
    //That's not a letter 
} 

你可以做到這一點,因爲這封信是一個接一個,但你不能做

if(c>= 'A' && c<= 'z') 

,因爲有他們

+1

技術上,Java使用Unicode,而不是ASCII。除了你的代碼處理之外,還有很多很多的字母。不過,我相信這個解決方案會滿足。 –

1

也許之間有幾個跡象你可以廁所ķ成正則表達式(不是我喜歡的方式,如果我是誠實的),但它的短,它的工作(也可能給你一個不同的準):

String letterPattern = "^(?i)[a-z]$"; 
String vowelPattern = "^(?i)[aeoui]$"; 
String test = "A"; 

if(test.matches(letterPattern)) { 
    if(test.matches(vowelPattern)) { 
     System.out.println("This is a vowel!"); 
    } 
    else { 
     System.out.println("It's not ..."); 
    }   
} 
// you get the idea ... 
0

我要跳過的在那裏你讀一個單一的字符,但你要找的大概是什麼樣子這一部分:

if (!chr.isLetter()) { 
    // error 
} else if ("aeiou".contains(chr.toLowerCase()) { 
    // vowel 
} else { 
    // consonant 
} 

處理非ASCII字母,語言環境等也作爲練習留給讀者。

+0

注意:關於我的頭頂,我不知道一個角色是否算作CharSequence,但如果沒有,那麼這也是一個練習。 –