Упростить код - проверка первого символа в строке на соответствие списку символов - PullRequest
1 голос
/ 14 марта 2019

Итак, это мой код на данный момент;

public static boolean isValidPiecePlacement(String piecePlacementString) {

    if (piecePlacementString.charAt(0) == 'A' || piecePlacementString.charAt(0) == 'B' ||
    piecePlacementString.charAt(0) == 'C' || piecePlacementString.charAt(0) == 'D' ||
    piecePlacementString.charAt(0) == 'E' || piecePlacementString.charAt(0) == 'F' ||
    piecePlacementString.charAt(0) == 'G'){
        return true;
    }


    return false;

Работает нормально, но не эффективно. Мне было интересно, если кто-то знал, как это сделать это более эффективный способ? Код просто проверяет, является ли первый символ правильным, то есть символами A-G Это также должно вернуть истину. Спасибо

Ответы [ 6 ]

8 голосов
/ 14 марта 2019

['A', 'G'] - это диапазон символов, поэтому его можно упростить до

public static boolean isValidPiecePlacement(String piecePlacementString) {
    if (piecePlacementString == null || piecePlacementString.length() == 0) {
        return false;
    }

    final char firstChar = piecePlacementString.charAt(0);

    if (firstChar >= 'A' && firstChar <= 'G') {
        // make other comparisons
        return true;
    }
    return false;
}

char - это целочисленный тип, поэтому операторы числового сравнения, такие как >= и <=, могут бытьприменяется к своим переменным / литералам.

2 голосов
/ 14 марта 2019

char s могут фактически использоваться в качестве числовых значений. За каждым char стоит десятичное представление в соответствии с таблицей ASCII .

Символ A имеет десятичное значение ASCII 65, а G имеет значение 71.

Вы можете упростить свой код до

public static boolean isValidPiecePlacement(String piecePlacementString) {
    char c = piecePlacementString.charAt(0);
    return c >= 'A' && c <= 'G';
}
1 голос
/ 14 марта 2019

Вы можете использовать для этого regex, например ::1002 *

String regex = "[A-G].*";
System.out.println("Asdsd".matches(regex));
System.out.println("Bsdsd".matches(regex));
System.out.println("Csdsd".matches(regex));
System.out.println("Dsdsd".matches(regex));
System.out.println("Hsdsd".matches(regex));
0 голосов
/ 14 марта 2019

Мы можем использовать регулярное выражение:

String regex = "(^[A-G].*)";
System.out.println("Adfgh".matches(regex));
0 голосов
/ 14 марта 2019

Вы можете просто вернуть следующее:

return "ABCDEFG".indexOf(piecePlacementString.charAt(0))>-1;

0 голосов
/ 14 марта 2019

Вы можете использовать Set правильных первых символов, таких как:

Set<Character> set = Set.of('A', 'B', 'C', 'D', 'E', 'F', 'G');
return set.contains(piecePlacementString.charAt(0));
...