所以我想检查输入的位置在国际象棋棋盘中是否有效,
//returns true if the position is in the range of A1-H8
private boolean isValid(String position){
char first=position.charAt(0);
String letter=(""+first).toLowerCase();
boolean validLetter=position.equals("a") || position.equals("b") || position.equals("c")||
position.equals("d") || position.equals("e")|| position.equals("f") || position.equals("g") ||
position.equals("h");
正如您所看到的,布尔值非常难看,那么更好的方法是什么呢?
顺便说一下,如何检查第二个字符是否为数字?
===编辑==== 感谢大家!但是你的所有答案对我来说都是如此复杂,我只是开始学习java,那么请你给我一个更基本的解决方法吗?
答案 0 :(得分:6)
正则表达式简化了这一点:
private boolean isValid(String position) {
return position.matches("^[a-h][1-8]$");
}
如果你对正则表达式不满意,也许这样的事情会更适合你:
private boolean isValid(String position) {
if (position.length() != 2) {
return false;
}
char firstChar = position.charAt(0);
List<Character> validFirstChars = Arrays.asList('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
if (!validFirstChars.contains(firstChar)) {
return false;
}
char secondChar = position.charAt(1);
List<Character> validSecondChars = Arrays.asList('1', '2', '3', '4', '5', '6', '7', '8');
if (!validSecondChars.contains(secondChar)) {
return false;
}
return true;
}
作为优化,validFirstChars
和validSecondChars
可以成为类的final static
成员,而不是在每次方法调用时实例化。
答案 1 :(得分:0)
字符实际上是Java中的整数,可用于检查字符是否在某个范围内。因此,您可以检查角色是否在97到104的范围内(ascii中的'a'到'h'的值):
return first < 105 && first > 96;
(您可以在my page here上阅读有关字符的更多信息:)
答案 2 :(得分:0)
一个非常简单的例子:
private boolean isValid(String position) {
// We will check only strings with 2 characters
if (position.length() != 2) {
return false;
}
// If the first char is not between a and h, let's return false.
char first = position.charAt(0);
if (first < 'a' || 'h' < first) {
return false;
}
// If the second char is not between 1 and 8, let's return false.
char second = position.charAt(1);
if (second < '1' || '8' < second) {
return false;
}
// We couldn't prove the position was invalid, so it must be valid.
return true;
}