最佳编码样式 - 检查字符是否为有效字符

时间:2009-08-12 16:19:33

标签: java checkstyle

我正在编写一个返回给定字符是否有效的方法,如下所示: -

private static boolean isValid(char c) {
    return c == '.' || c == ',' || c == '+' || c == '/' || c == ';' || c == ':';
}

检查样式标记了这一点,因为布尔复杂度太大(当它不应该超过3时为5)。我的开发经理已经标记了一些替代实现,我将作为答案发布。就个人而言,我认为我的代码足够可读,并且希望关闭此方法的检查样式。

您怎么看?

7 个答案:

答案 0 :(得分:11)

private static boolean isValid(char c) {
    String validChars =".,+/;:";
    return (validChars.indexOf(c) > -1);
}

答案 1 :(得分:5)

private static boolean isValid(char c) {
    switch (c) {
    case '.' : // FALLTHROUGH
    case ',' : // FALLTHROUGH
    case '+' : // FALLTHROUGH
    case '/' : // FALLTHROUGH
    case ';' : // FALLTHROUGH
    case ':' :
      return true;
    default : return false;
    }
}

答案 2 :(得分:2)

private static boolean isValid(char c) {
    /* CHECKSTYLE:OFF */
    return c == '.' || c == ',' || c == '+' || c == '/' || c == ';' || c == ':';
    /* CHECKSTYLE:ON */
}

答案 3 :(得分:2)

我会使用Set。它具有描述性名称的好处,并且可以很好地扩展。

private static Set<Character> validCharacters = new HashSet<Character>();

public static void initValidCharacters() {
    validCharacters.add('.');
    validCharacters.add(',');
    validCharacters.add('+');
    validCharacters.add('/');
    validCharacters.add(';');
    validCharacters.add(':');
}

private static boolean isValid(char c) {
    return validCharacters.contains(c);
}

答案 4 :(得分:1)

private static boolean isValid(char c) {
    char[] validChars2 = {'.', ',', '+', '/', ';', ':'};
    for (char d : validChars2) {
      if (c == d) { return true; }
    }
    return false;
}

答案 5 :(得分:0)

正则表达式可以很好地运行。我已将其硬编码到下面的示例中,但您可以轻松地将其从配置文件中拉出来。

    [Test]
    public void AisNotValid ()
    {
        Assert.IsFalse(IsValid('a'));
    }

    [Test]
    public void SemiColonIsValid ()
    {
        Assert.IsTrue(IsValid(';'));
    }

    public bool IsValid(Char c)
    {
        return Regex.IsMatch(Regex.Escape(".,+/;:"), c.ToString());
    }

Regex.Escape()方法在这里派上用场,因为它会转义通常在正则表达式中有意义的字符。从文档:“通过用它们的转义码替换它们来逃避一组最小的字符(\,*,+,?,|,{,[,(,),^,$,。,#和空格)。 “

答案 6 :(得分:0)

如果不考虑可读性,可以使用半二进制搜索来处理,布尔复杂度为3

作为char值的参考

+ 11
, 12
. 14
/ 15
: 26
; 27

private static boolean isValid(char c)
{
    return c > 14 ? c == '/' || c == ';' || c == ':' : c == '.' || c == ',' || c == '+';
}