2013-08-25 96 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,但如果没有,那么这也是一个练习。 –