Java 如何检查字符串是否等于有效字符之一?(棋盘)

Java 如何检查字符串是否等于有效字符之一?(棋盘),java,string,chess,Java,String,Chess,所以我想检查输入的位置在棋盘上是否有效 //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") || posi

所以我想检查输入的位置在棋盘上是否有效

//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,所以你能给我一个更基本的方法来解决这个问题吗?

正则表达式很简单,这是一个:

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可以成为类的最终静态成员,而不是在每次方法调用时实例化。

正则表达式可以简化以下工作:

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可以成为类的最终静态成员,而不是在每次方法调用时实例化。

字符在Java中实际上是整数,可以用来检查字符是否在某个范围内。因此,您可以检查字符是否在97到104的范围内,即“a”到“h”的值:


您可以在上阅读有关字符的更多信息:

字符在Java中实际上是整数,可用于检查字符是否在特定范围内。因此,您可以检查字符是否在97到104的范围内,即“a”到“h”的值:


您可以在以下网站上阅读有关字符的更多信息:

一个非常简单的示例:

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

一个非常简单的例子:

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


也许position应该有自己的类。你可以先创建一个position地图,然后检查Map.getposition==nullI是否会将宇宙的秘密委托给你。。。雷格克斯!也许position应该有自己的类。你可以先创建一个position地图,然后检查Map.getposition==nullI是否会将宇宙的秘密委托给你。。。雷格克斯!这是一个非常优雅的问题解决方案,非常适合正则表达式。哇,它看起来非常清晰,非常感谢,但我认为它太高级了,所以我的老师不允许我这么做。@asah出于好奇,使用列表会比abcdefgh.indexOfchar这样的东西更快吗?此外,国际象棋符号通常先有字母,然后是字母number@DennisMeng:不知道。您应该对其进行基准测试。不过我不会担心的。这几乎不会成为国际象棋程序的瓶颈。计算机播放器的算法将使你在这种方法上可能进行的任何微观优化相形见绌。顺便说一句:谢谢你让我知道字母和数字是颠倒的。我会解决的。这是一个非常优雅的问题解决方案,非常适合正则表达式。哇,它看起来非常清晰,非常感谢,但我认为它太高级了,所以我的老师不允许我这么做。@asah出于好奇,使用列表会比abcdefgh.indexOfchar这样的东西更快吗?此外,国际象棋符号通常先有字母,然后是字母number@DennisMeng:不知道。您应该对其进行基准测试。不过我不会担心的。这几乎不会成为国际象棋程序的瓶颈。计算机播放器的算法将使你在这种方法上可能进行的任何微观优化相形见绌。顺便说一句:谢谢你让我知道字母和数字是颠倒的。我会解决这个问题的。这可能是一个好主意,告诉你97和104是从哪里来的。仅适用于以后偶然发现此问题的任何人:对我来说很有道理!谢谢大家!@DennisMeng,添加了ascii表的链接。提到97和104的来源可能是个好主意。仅适用于以后偶然发现此问题的任何人:对我来说很有道理!谢谢大家!@DennisMeng,添加了到ascii表的链接。