0

我是Java的初学者,我的问题可能看起来有点可怕,但我们将不胜感激!

无论如何,我的问题很好,书中的问题是:

“编写一个程序,提示用户提供字母赌注中的单个字符。根据用户输入打印元音或辅音。如果用户输入不是字母(介于 a 和 z 或 A 和 Z 之间),或者是长度 > 1 的字符串,打印错误消息。

您如何检测输入是否不是字母,将不胜感激!谢谢!

4

4 回答 4

2

大多数常用语言的输入是 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')

因为它们之间有几个标志

于 2013-08-25T05:36:35.217 回答
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 ...
于 2013-08-25T05:41:47.380 回答
0

我将跳过您阅读单个字符的部分,但您要查找的内容可能如下所示:

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

处理非 ascii 字母、语言环境等也留给读者作为练习。

于 2013-08-25T05:47:35.780 回答
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;
  }
}
于 2013-08-25T05:31:50.030 回答