我是Java的初学者,我的问题可能看起来有点可怕,但我们将不胜感激!
无论如何,我的问题很好,书中的问题是:
“编写一个程序,提示用户提供字母赌注中的单个字符。根据用户输入打印元音或辅音。如果用户输入不是字母(介于 a 和 z 或 A 和 Z 之间),或者是长度 > 1 的字符串,打印错误消息。
您如何检测输入是否不是字母,将不胜感激!谢谢!
我是Java的初学者,我的问题可能看起来有点可怕,但我们将不胜感激!
无论如何,我的问题很好,书中的问题是:
“编写一个程序,提示用户提供字母赌注中的单个字符。根据用户输入打印元音或辅音。如果用户输入不是字母(介于 a 和 z 或 A 和 Z 之间),或者是长度 > 1 的字符串,打印错误消息。
您如何检测输入是否不是字母,将不胜感激!谢谢!
大多数常用语言的输入是 ACII。要查看什么是 ascii,请查看此表
(来源:cdrummond.qc.ca)
当您收到用户的来信时,您会收到一个char
. 这个 char 包含一个数字,它是一个字母,相对于 ASCII 表,这意味着如果你的 char 中有 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')
因为它们之间有几个标志
也许您可以研究正则表达式(老实说,这不是我最喜欢的方法),但它很短并且可以完成工作(也可能会给您带来不同的前景):
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 ...
我将跳过您阅读单个字符的部分,但您要查找的内容可能如下所示:
if (!chr.isLetter()) {
// error
} else if ("aeiou".contains(chr.toLowerCase()) {
// vowel
} else {
// consonant
}
处理非 ascii 字母、语言环境等也留给读者作为练习。
最简单的就是这样
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;
}
}