2013-11-14 58 views
1

所以,我要检查,如果输入的位置是在国际象棋棋盘有效,如何检查字符串是否等于有效字符之一? (棋盘)

//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,那么请你给我一个更基本的解决方法?

+2

也许位置应该有自己的类 –

+0

可以(预处理)创建位置的'Map',然后检查是否'map.get(位置)== NULL ' – alfasin

+0

我将委托给你宇宙的秘密...... regEx! –

回答

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

作为优化,validFirstCharsvalidSecondChars可能被做成final static类的成员,而不是在每个方法调用上实例化。

+1

非常适合正则表达式问题的优雅解决方案。 – blalasaadri

+1

哇,看起来非常清楚,非常感谢,但我认为它太高级,所以我的老师不会允许我这样做.. –

+0

@Asaph出于好奇,会使用'List'比类似''更快ABCDEFGH” .indexOf(焦炭)'? (另外,国际象棋通常先有字母,然后是数字) –

0

字符在Java中是真正的整数,可以用来检查一个字符是否落在一定范围内。所以,你可以检查字符在上述范围内97至104(这是“A”到ascii“H”的值):

return first < 105 && first > 96; 

(你可以阅读更多关于字符在my page here :)

+0

(这可能是一个好主意,提到你从哪里得到97和104,只是对于那些后来碰到这个问题的人:)) –

+0

对我来说是完全合理的!谢谢! –

+0

@ DennisMeng,添加到ascii表的链接。 – Ari

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; 
} 
相关问题