【问题标题】:Search string in string C#在字符串 C# 中搜索字符串
【发布时间】:2012-09-18 07:40:27
【问题描述】:

我有一个字符串“EMP1$0,EMP2$1,EMP3 $1, Emp4$ 0, emp44$1”;这些是用逗号分隔的员工代码 (,)。每个员工代码都附有他们的状态(即 1 表示活跃,0 表示不活跃,并用 $ 符号分隔)。员工代码不包含空格,但员工代码和 $ 之间可以有空格。我需要检查该字符串中是否存在员工代码“EMP4”。哪个是最好的方法?

任何帮助都是非常值得赞赏的。

编辑:

var strResult = from string str in hdnEmpCodes.Value.Split(',') 
                where str.Length > 0 && str.Substring(0, str.IndexOf("$")).Trim() == lnkEmpCode.Text.Trim() 
                select str.ToString(); 

但它没有提供所需的输出。

【问题讨论】:

  • var strResult = from string str in hdnEmpCodes.Value.Split(',') where str.Length > 0 && str.Substring(0, str.IndexOf("$")).Trim() == lnkEmpCode.Text.Trim() select str.ToString(); 但它没有提供所需的输出。
  • 检查下面提供的答案,因为上帝是我的见证,我不知道你为什么使用 linq 查询。

标签: c# asp.net linq split


【解决方案1】:

你可以使用 string.Contains 方法

bool employeeExistsInString = string.Contains(yourString);

不过,如果你至少先用谷歌搜索一下就好了。

【讨论】:

  • 如果员工代码是字符串中的 EMP44 和 EMP40,我要搜索 EMP4... 这会给出正确的输出吗?
  • 是的,如果您正在寻找 EMP44,只有当它的 EMP44 完全正确时才会返回 true。
  • @Freeman - techdo 的评论是有效的 - 如果您搜索“EMP4”并且您的员工代码为“EMP44”和“EMP40”,您的代码将触发误报。
【解决方案2】:

如果你从以下开始:

var text = "EMP1$0,EMP2$1,EMP3 $1, Emp4$ 0, emp44$1";

然后您可以执行此查询以提取“EMP”代码:

var query =
    from x in text.Split(',').Select(_ => _.Trim())
    let y = x.Split('$').Select(_ => _.Trim())
    where y.Any()
    select y.First();

这将给出以下结果:

现在只需检查任何返回值是否匹配即可。

var found = query.Any(x => x.ToUpperInvariant() == "EMP4");

这能满足你的需要吗?

【讨论】:

    【解决方案3】:

    使用字符串。包含

    if(str.Contains("EMP4"))
    

    编辑:根据您的评论。

    由于您在问题中说您的值将用逗号分隔。您可以尝试以下方法。

    string str = "EMP10, EMP44, EMP5"; //your sample string. 
    string[] tempArray = str.Split(',');
    if (tempArray.Contains("EMP4")) //This will result in Not Found
    {
        Console.WriteLine("Found");
    }
    if (str.Contains("EMP4")) //But a simple string.Contains will result in matching 
                              //it to EMP44
    {
        Console.WriteLine("here");
    }
    

    【讨论】:

    • @techdo,您的问题中可能有这个问题。因为我错过了它,而且看起来和其他人一样。
    • 字符串为“EMP1$0,EMP2$1,EMP3 $1, Emp4$ 0, emp44$1”,即EMP1$0EMP1为员工代码,0为状态。
    【解决方案4】:

    创建一个 csv 列表并在列表中使用 contains

    【讨论】:

      【解决方案5】:

      你可以使用正则表达式

      Regex r = new Regex("EMP4[^\\d]"); 
      Match m = r.Match(yourString); 
      if (m.Success) 
      {
          // your code
      }
      

      这会搜索任何 EMP4 字符串后面没有另一个数字

      【讨论】:

        猜你喜欢
        • 2012-02-10
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        • 2012-04-13
        • 1970-01-01
        相关资源
        最近更新 更多