如何检测字符串是否包含数字作为数字或写入C#中的字母?

时间:2016-11-16 11:38:49

标签: c# string digits

我希望能够检测字符串是否包含数字,可以是数字(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上找不到具体回答这个问题的任何内容;他们主要是从字符串中提取整数,所以我想继续问问。

是否有可以处理此类内容的库?如果没有,我该如何处理?有没有比将所有措辞数字放入数组更快的方法?

2 个答案:

答案 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)

创建一个数组,其中包含您要在该字符串中查找的所有内容并对其进行迭代。

如果您只关心个位数,那么这是一个禁食的解决方案。如果你想用各种数字来做,那就需要更多的工作......