【问题标题】:Simplify code - Checking the first character in a string to match a list of characters简化代码 - 检查字符串中的第一个字符以匹配字符列表
【发布时间】:2019-08-05 02:56:08
【问题描述】:

所以这是我目前的代码;

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”中的字符。它还必须返回 true。谢谢

【问题讨论】:

    标签: java string boolean


    【解决方案1】:

    ['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 是一个整数类型,因此可以将 &gt;=&lt;= 等数值比较运算符应用于其变量/文字。

    【讨论】:

    • 这很好用,我应该补充一点,我也需要为第二个和第三个字符执行此操作。但是,第二个字符需要来自“A”-“Z”,第三个字符需要来自“A”-“F”。我认为通过查看第一个解决方案,我可以完成剩下的工作,但是,您的解决方案会返回最终声明。
    • @goat 更新了,可以在if语句下写其他条件,或者在一个条件里面更复杂
    【解决方案2】:

    chars 实际上可以用作数值。每个char 后面是根据ASCII table 的十进制表示。

    字符A 的十进制ASCII 值为65,而G 的值为71。

    您可以将代码简化为

    public static boolean isValidPiecePlacement(String piecePlacementString) {
        char c = piecePlacementString.charAt(0);
        return c >= 'A' && c <= 'G';
    }
    

    【讨论】:

      【解决方案3】:

      您可以为此使用regex,例如:

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

      【讨论】:

        【解决方案4】:

        您可以使用Set 正确的第一个字符,例如:

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

        【讨论】:

          【解决方案5】:

          您可以简单地返回以下内容:

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

          【讨论】:

            【解决方案6】:

            我们可以使用正则表达式:

            String regex = "(^[A-G].*)";
            System.out.println("Adfgh".matches(regex));
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-10-04
              • 1970-01-01
              • 2023-03-28
              相关资源
              最近更新 更多