方法hexnumber给出false

时间:2017-10-23 17:00:42

标签: c#

如果字符串包含十六进制,则此方法应返回true else false。我的输入为2D时出现以下问题,因此它应返回true但返回false而不是

static bool IsHexNumber(string s)
{ 
    for (int i = 0; i < s.Length; i++)
    {
        char zeichen = s[i];
        if("ABCDEFabcdef0123456789".Contains(zeichen))
        {
            return false;
        }
    }
    return true;
}

有人能指出代码上的错误在哪里吗?

2 个答案:

答案 0 :(得分:1)

这应该可以解决你的问题,如果你愿意,也可以使用其他问题,但这种方式更快,更清楚......

for (int i = 0; i < s.Length; i++)
    {
        char zeichen = s[i];
        if("ABCDEFabcdef0123456789".Contains(zeichen) == false)
        {
            return false;
        }
    }
    return true;
}

答案 1 :(得分:0)

另一种选择是使用Linq 它将使您的代码更简短,更易于阅读:

private static readonly HashSet<char>  charSet
  = new HashSet<char>("ABCDEFabcdef0123456789");

static bool IsHexNumber(string s)
{
    return s.All(c => charSet.Contains(c));
}

如果你使用的是C# 6,那就更短了:

static bool IsHexNumber(string s)
    => s.All(c => charSet.Contains(c));

注意:我使用的是HashSet,因为它Contains会有O(1)的复杂性。 Enumerable.Contains扩展方法具有线性复杂度O(N)