【问题标题】:How can I find out if a comma separated list contains a value?如何确定逗号分隔的列表是否包含值?
【发布时间】:2014-12-14 11:51:07
【问题描述】:

我有:

var a1 = "1,2,12,13";
var a2 = "2,12,13";

var b1 = a1.Contains(1); // Should give true
var b2 = a2.Contains(1); // Should give false

如何确定字符串 a 是否包含值 1 而不是任何 1?

【问题讨论】:

  • 您的问题是什么? '而不仅仅是任何 1?'
  • @Sajeetharan 非常糟糕的措辞和语法,但我认为 OP 想要检查是否有任何 逗号分隔值 是数字 1,而不是检查是否有任何字符'1'
  • @OP:这很简单。用逗号分割字符串,并将Contains 应用于结果数组。

标签: c# .net string csv


【解决方案1】:

您可以使用此扩展方法。请记住,如果您的输入字符串有任何问题,那么这将引发异常,您可以根据需要为其添加异常处理。 (如使用int.TryParse 或支持不同的分隔符而不是逗号)

public static class StringExtension
{
    public static bool ContainsInt(this string str, int value)
    {
        return str.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(x => int.Parse(x.Trim()))
            .Contains(value);
    }
}

这会将您的字符串拆分为,,因此您将拥有所有数字,但以字符串表示形式。然后您尝试将它们转换为整数值。之后,您检查这些值是否包含您想要的整数值。 像这样使用它

var a1 = "1,2,12,13";
var a2 = "2,12,13";

var b1 = a1.ContainsInt(1); // gives true
var b2 = a2.ContainsInt(1); // gives false

如果你想在没有扩展方法的情况下使用它,你可以这样做

var a1 = "1,2,12,13";
var a2 = "2,12,13";

var b1 = a1.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(x => int.Parse(x.Trim()))
            .Contains(1); // gives true

var b2 = a2.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(x => int.Parse(x.Trim()))
            .Contains(1); // gives false

【讨论】:

  • @doctor - 你能举例说明如何在没有扩展方法的情况下做到这一点吗?谢谢
  • @doctor - 我收到错误 System.Array 不包含选择的定义
  • 添加using System.Linq;
  • @marifemac 您可以使用正则表达式检查 (^1(\s){0,},)|(,(\s){0,}1(\s){0 等模式,},)
  • 您也可以将搜索到的值转换为字符串并搜索它,而无需从数组中解析值:var b2 = a2.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Contains(1.ToString());
【解决方案2】:

如果你确定你的字符串不包含空格,你可以使用这个:

public static class StringExtension
{
    public static bool ContainsValue(this string str, object value)
    {    
       return str.StartsWith(value.ToString()+",") ||  str.EndsWith(","+value) || str.Contains(","+value+",");
    }
}

【讨论】:

  • 或者你可以事先str.Replace(" ","")
  • 是的,或者那个。很好的收获。
  • 我在一个较旧但目前使用的项目中使用了这个 sn-p。 SqlServer 2005 数据库有一个表,其中一列具有逗号分隔值。在保存数据之前,我确保该列没有空格。所以不需要删除空格。
【解决方案3】:
 private bool IsFound(string input)
    {

        string[] a1_values = input.Split(',');


        foreach (string item in a1_values)
        {
            if (item == "1")
            {

               return true;
            }
            else
            {

                return false;

        }

    }

【讨论】:

  • 这只会检查第一项,而 isFound 变量是没有意义的。
  • 是的......你是对的,isFound 变量是没有意义的。我删除了它。是的,这会检查您输入的任何输入,因此如果您有更多输入,请再次运行该方法
  • 它仍然只会检查 a1_values 中的第一个值(无论 a1 是什么)。您需要将return false; 移到循环之外,以便它检查所有项目。否则它只会检查第一个并返回 false。
猜你喜欢
  • 2022-06-10
  • 2011-08-02
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多