我想让用户输入一个字母,然后打印出字母及其在字母表中的位置。如果输入不是字母,我希望程序打印:"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));
}
}
}
学校作业,所以这段代码没有用处。并感谢所有的回应!
答案 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提高答案(详见修订版)。