【问题标题】:Strings, how to recognize letters字符串,如何识别字母
【发布时间】:2013-08-25 05:23:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • 使用字母范围比较(input >='a' && input<='z')|| (input >='A' && input<='Z')的英文标准字母集
  • 请尝试一下,有具体问题来这里...

标签: java if-statement


【解决方案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')

因为它们之间有几个标志

【讨论】:

  • 从技术上讲,Java 使用 Unicode,而不是 ASCII。除了您的代码处理的 52 个字母之外,还有很多很多字母。不过,我相信这个解决方案会令人满意。
【解决方案2】:

也许您可以研究正则表达式(老实说,这不是我最喜欢的方法),但它很短并且可以完成工作(也可能会给您带来不同的前景):

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 ...

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 注意:在我的脑海中,我不知道一个字符是否算作 CharSequence,但如果不是,那么这也留给读者作为练习。
    【解决方案4】:

    简单的应该是这样的

    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;
      }
    }
    

    【讨论】:

    • “简单”如“不编译”?
    • @Mat - 显然,它不是打算编译的。
    猜你喜欢
    • 2020-03-30
    • 2018-05-03
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2016-10-24
    相关资源
    最近更新 更多