我希望能够检测字符串是否包含数字,可以是数字(0-9)还是普通英文字母(一,二,三......)。字符串中的字母数字应该被检测为单个单词,而不是单词的一部分。
例如:
"This string contains no numbers" = false;
"This string contains the number 1" = true;
"This string contains the number three" = true;
"This string contains a dogs bone" = false; //contains the word 'one' as part of the word 'bone', therefore returns false
在SO上找不到具体回答这个问题的任何内容;他们主要是从字符串中提取整数,所以我想继续问问。
是否有可以处理此类内容的库?如果没有,我该如何处理?有没有比将所有措辞数字放入数组更快的方法?
答案 0 :(得分:4)
如果简单地说你的意思是使用内置库,那么我不知道一个,如果有人知道的话,我会很乐意纠正。
修改:使用OP澄清和AndyJ推荐更新
要在不同的单词上执行此操作,您可以使用此方法:
public bool ContainsNumber(string s)
{
// This is the 'filter' of things you want to check for
// The '...' is for brevity, obviously it should have the other numbers here
var numbers = new List<string>() { "1", "2", "3", ... , "one", "two", "three" };
// Split the provided string into words
var words = s.Split(' ').ToList();
// Checks if the list of words matches ANY of the provided numbers
// Case and culture insensitive for better matching
return words.Any(w => numbers.Any(n => n.Equals(w, StringComparison.OrdinalIgnoreCase)));
}
用法:
ContainsNumber(&#34;此处没有数字&#34;);
ContainsNumber(&#34;三号&#34;);
ContainsNumber(&#34;狗吃了骨头&#34;);
输出:
假
真正
假
编辑2:返回匹配的字词
public List<string> GetMatches(string s)
{
var numbers = new List<string>() { "1", "2", "3", ... , "one", "two", "three" };
var words = s.Split(' ').ToList();
return words.Intersect(numbers, StringComparer.OrdinalIgnoreCase).ToList();
}
用法:
GetMatches(&#34;没有数字&#34;);
GetMatches(&#34;这有一个数字&#34;);
GetMatches(&#34;这个1有骨头&#34;);
GetMatches(&#34; 1 2 3然后更多&#34;);
输出:
空
&#34;一个&#34;
&#34; 1&#34;
&#34; 1&#34;,&#34; 2&#34;,&#34; 3&#34;
答案 1 :(得分:0)
创建一个数组,其中包含您要在该字符串中查找的所有内容并对其进行迭代。
如果您只关心个位数,那么这是一个禁食的解决方案。如果你想用各种数字来做,那就需要更多的工作......