获取用户的来信并打印出字母中的位置

时间:2016-02-06 19:31:44

标签: java

我想让用户输入一个字母,然后打印出字母及其在字母表中的位置。如果输入不是字母,我希望程序打印:"Not valid"

我该怎么做?

编辑 - 对不起我的反应迟钝,我实际上几天前已经弄明白了。下面是实际的代码:

import java.util.Scanner;

public class AlphaPos {
   public static void main(String[] args) {
   java.util.Scanner input = new java.util.Scanner(System.in);
      System.out.println(" Please enter an upper or lowercase letter. ");
           String letter = input.nextLine();

           String alpha = " abcdefghijklmnopqrstuvwxyz";
           String beta = " ABCDEFGHIJKLMNOPQRSTUVWXYZ";

         if((!alpha.contains(letter))&&(!beta.contains(letter))) 
              System.out.println(" You entered " +letter+ ", and you obviously can't follow directions."); 

        boolean hasUppercase = !letter.equals(letter.toLowerCase()); {
           if (hasUppercase) 
              System.out.println("Your letter is " +letter+ ", Uppercase, and its number is "+ beta.indexOf(letter));

        boolean hasLowercase = !letter.equals(letter.toUpperCase());
           if (hasLowercase)
                 System.out.println("Your letter is " +letter+ " ,lowercase , and its number is "+ alpha.indexOf(letter));
                                                                      }   

   }
}

学校作业,所以这段代码没有用处。并感谢所有的回应!

3 个答案:

答案 0 :(得分:2)

我的简单测试通过利用char值也被评估为ASCII int值的事实来验证这是有效的,因此您可以执行一些简单的数学运算,如图所示。

英文字母有26个可能的位置,因此if条件检查了该字母的越界。

char c = 'd'; // Replace with user input like Scanner#next() or something

// output: 'A' = 1, 'Z' = 26
int position = (Character.toUpperCase(c) - 'A' + 1);

if (position < 1 || position > 26) {
    System.out.println("Not valid");
} else {
    System.out.println(String.format("Character: %s\nPosition: %d", c, position));
}

<强>输出

Character: d
Position: 4

答案 1 :(得分:1)

首先想到这是我的想法:

char c = ...
if(!Character.isLetter(c)) {
   return "Not valid!";
} else {
    System.out.println("Letter:"+c+", position: "+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(c));
}

答案 2 :(得分:0)

可能不是最快的方式,但强大且易于理解:

public class Example {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        while (true) {
            String input = sc.nextLine();
            if (input.matches("[a-zA-Z]")) {
                System.out.println(input);
                char c = input.toLowerCase(Locale.ENGLISH).charAt(0);
                System.out.println(c - 96);
            }
            else
                System.out.println("Not valid");
        }
    }
}

我使用正则表达式检查输入是否是英文字母中的单个字符,小写或大写。如果是,则打印出来。为了获得字母表中的位置,我将其转换为小写(因为大写和小写都具有相同的位置)并减去其int值,以便将a规范化为1

循环就在那里,以便于测试。

感谢cricket_007和Tunaki提高答案(详见修订版)。