如果字符串包含十六进制,则此方法应返回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;
}
有人能指出代码上的错误在哪里吗?
答案 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)