Java程序:测试字符是否为大写字母/小写字母/数字/元音字母

10

如我之前所说,如何测试输入的字符是否为参数之一?我已经编写了这段代码,但它似乎并没有很好地运行(或者根本没有运行),没有错误。此外,我需要使用我在这里使用的基本代码。这是为了学校而编写的,如果我们使用他们没有教过的东西,我们就会失分(该死的学校)。

class doody
 {
  public static void main(String[] args)
  { char i;
    char input='D';

    for(i='A';i<='Z';i++)//check if uppercase
    {
        if(input==i){
            System.out.println("Uppercase");
            switch(input){
            case 'A':
            case 'E':
            case 'I':
            case 'O':
            case 'U':
                System.out.println("Vowel"); break;
            default: System.out.println("Not a vowel"); break;}
            }

        for(i='a';i<='z';i++)//check if lowercase
        {
            if(input==i){
                System.out.println("Lowercase");
                switch(input){
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':
                System.out.println("Vowel"); break;
                default: System.out.println("Not a vowel"); break;
                }}


        for(i='0';i<='9';i++)//check if number
        {
            if(input==i)
                System.out.println("Number");
        }

    }

}}}

编辑:这是我今天拼凑出来的一些代码。更为简单。我不知道为什么之前没有想到,可能是因为当时还有点儿迷糊,而且已经很晚了。

class doody
{
 public static void main(String[] args)
 {  
    char input='$';//input here.

    boolean lorn=false;
    if(input>='a'&&input<='z')
        {System.out.println("Lowercase");
            lorn=true;
        if(input=='a')System.out.println("Vowel.");
        if(input=='e')System.out.println("Vowel.");
        if(input=='i')System.out.println("Vowel.");
        if(input=='o')System.out.println("Vowel.");
        if(input=='u')System.out.println("Vowel.");
        }

    if(input>='A'&&input<='Z')
        {System.out.println("Uppercase");
            lorn=true;
        if(input=='A')System.out.println("Vowel.");
        if(input=='E')System.out.println("Vowel.");
        if(input=='I')System.out.println("Vowel.");
        if(input=='O')System.out.println("Vowel.");
        if(input=='U')System.out.println("Vowel.");
        }

    if(input>='0'&&input<='9')
        {
            lorn=true;
            System.out.println("Number");
        }

    if(lorn==false)System.out.println("It is a special character");
 }
}

2
你应该尝试一次解决一个任务的一部分,而不是一次性解决所有问题。将其分解为更小的部分并解决每个小问题。然后,如果您在特定的子点上被卡住了,我们就能更好地帮助您。编辑: 用户在哪里输入字符? - Hovercraft Full Of Eels
3
你混淆了大写和小写。大写是 A-Z,小写是 a-z。 - Arjan
2
你的代码很难阅读,因为缩进不正确。每行只放一个 } - JB Nizet
感谢指出大小写问题。我有点把它们搞混了(不知道为什么),可能会漏掉一些。 - Prnth
@HovercraftFullOfEels 他们还没有教我们任何输入方法,所以我必须手动输入该字符。我将其分配给名为“input”的char变量。 - Prnth
“它似乎无法正常运行(或完全无法运行)”作为问题的描述,几乎毫无价值。 - Raedwald
8个回答

13
如果这不是一个作业的话,你可以使用现有的方法,如Character.isDigit(char)Character.isUpperCase(char)Character.isLowerCase(char),它们会更加"智能",因为它们不仅在ASCII中操作,也在各种字符集中操作。
static final char[] VOWELS = { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' };

static boolean isVowel(char ch) {
    for (char vowel : VOWELS) {
        if (vowel == ch) {
            return true;
        }
    }
    return false;
}

static boolean isDigit(char ch) {
    return ch >= '0' && ch <= '9';
}

static boolean isLowerCase(char ch) {
    return ch >= 'a' && ch <= 'z';
}

static boolean isUpperCase(char ch) {
    return ch >= 'A' && ch <= 'Z';
}

12
你的代码中不需要使用for循环。以下是重新实现该方法的方式:
  • 如果输入位于'A'和'Z'之间,则大小写都可以
  • 如果输入位于'a'和'z'之间,则大小写都可以
  • 如果输入是'a,e,i,o,u,A,E,I,O或U'中的一个,则为元音字母
  • 否则为辅音字母

编辑:

这是你继续的提示,下面的代码片段给出了字符的int

System.out.println("a="+(int)'a');
System.out.println("z="+(int)'z');
System.out.println("A="+(int)'A');
System.out.println("Z="+(int)'Z');

输出

a=97
z=122
A=65
Z=90

以下是如何检查一个数字x是否存在于两个数字之间,比如ab

// x greater than or equal to a and x less than or equal to b
if ( x >= a && x <= b ) 

在比较过程中,char可以被视为数字。

如果您能结合这些提示,应该就能找到您想要的东西了 ;)


怎样测试一个字符是否在A和Z之间?你知道,我是个Java新手。 - Prnth
你已经做到了:for(i='A';i<='Z'iA 开始,循环继续,只要 i 小于(或等于)Z - JB Nizet
@JB 我能理解你不想让他感到困惑并坚持他的方法,但我认为我们应该告诉初学者他们明显的问题并给他们更好的解决方案。for-if 反模式 即使是初学者也不应该习惯。 - Voo
这不是我的观点。他问如何测试一个字符是否在A和Z之间,我告诉他他已经在原始代码中做到了这一点,因为它的循环已经使用了这样的比较。 - JB Nizet

7
在Java中:Character类有静态方法叫做isLowerCase(Char ch)和isUpperCase(Char ch),而Character.isDigit(Char ch)会给出布尔值,基于此,您可以轻松完成任务。
例如:
String abc = "HomePage";
char ch = abc.charAt(i); // here i= 1,2,3......

if(Character.isLowerCase(ch))
{
   // do something :  ch is in lower case
}

if(Character.isUpperCase(ch))
{
   // do something : ch is in Upper case
}

if(Character.isDigit(ch))
{
  // do something : ch is in Number / Digit
}

2

关于你的代码,我有一些评论

  • 为什么你要像for(i='A';i<='Z';i++)这样使用两个循环,如果你可以用一个简单的if语句来检查...你在整个范围内循环,而你只需要检查它是否包含在该范围内
  • 即使当你找到答案时(例如当输入为A时,第一次进入第一个循环就会得出结果),你仍然会循环所有剩余的部分
  • 你的System.out.println("Lowercase");语句(以及大写字母语句)放置在错误的循环中
  • 如果允许使用,建议查看Character类,其中包含了很好的isUpperCaseisLowerCase方法

由于这是作业,我把其余的留给你自己完成。


如何测试是否在范围内?我需要使用那些...数组吗?感谢您提供的“System out in the wrong loop”提示。我现在会修复它。 - Prnth

0

你好像把大小写搞反了。A-Z 是大写,a-z 是小写。虽然不是特别高效 - 除了大小写颠倒的情况,我认为它应该能正确输出。


0

这可能不是您想要的,但我想让您知道正确的方法。您可以使用java.lang.Character类的isUpperCase()方法来查找字符的大小写。 您可以使用isDigit()来区分数字和字母(这只是FYI :))。 然后,您可以使用toUpperCase()方法并执行元音字母转换。 这将提高您代码的质量。


我知道那个,但是我们在学校没有被教过。我们必须坚持老师教给我们的内容。我在考试中因为写了老师没有教过的东西而失去了很多分数。 - Prnth
那我认为你应该使用两个单独的布尔变量来设置大写/小写和辅音/元音的属性,然后根据这些布尔变量进行打印。 - MozenRath

0

这是你的作业,所以我假设你需要使用循环和switch语句。 没关系,但为什么你所有的循环都是内部的?

把它们提取到同一“级别”,你的代码就没问题了!(部分低/高混淆)。

提示:按下额外的“Enter”和“Space”是免费的! (这是我对你的代码所做的第一件事,问题变得非常微不足道)


好主意,先生。我现在要睡觉了,这里已经很晚了,但明天放学后我会马上开始工作,并在这里发布更新版本。 - Prnth

0
 Char input;

 if (input.matches("^[a-zA-Z]+$")) 
 {
     if (Character.isLowerCase(input))
     {
        // lowercase
     } 
     else
     { 
        // uppercase
     }

     if (input.matches("[^aeiouAEIOU]"))
     {
          // vowel
     }
     else 
     {
         // consonant
     }
 }
 else if (input.matches("^(0|[1-9][0-9]*)$"))
 {
       // number
 }
 else
 {
     // invalid
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接