代码之家  ›  专栏  ›  技术社区  ›  Illep

在找不到给定字符时拆分字符串的结果错误

  •  1
  • Illep  · 技术社区  · 6 年前

    当我尝试拆分字符串值 some text here 具有 ++ . 我期望结果是一个空列表。自从 ++ 在字符串中找不到 这里有一些文字 ,结果是 Count List 应该是 0 .

    然而,我得到的结果是 1 (当我 伯爵 )。

    如何确定字符串是否没有 ++ 在里面?(计数无效)

    List<string> l = value.Split("++").ToList();
    
    4 回复  |  直到 6 年前
        1
  •  3
  •   Gilad Green Fábio    6 年前

    观察到的行为是设计的。如果找不到分隔符,则返回具有单个项的集合。AS documentation states :

    如果此实例不包含分隔符中的任何字符,则返回的数组由包含此实例的单个元素组成。

    如果要检查分隔符是否存在,可以使用 .Contains("++") .IndexOf("++") != -1

        2
  •  1
  •   Bojo    6 年前

    默认情况下,如果找不到匹配项,则返回大小为1的数组中的字符串。

    如何确定字符串中是否没有+?

    if (value.Contains("++"))

    编辑:哇,我写这篇文章的时候已经有很多答案了。D

        3
  •  0
  •   Blue    6 年前

    正如@gilad等人所指出的,这确实是预期的产出。如果字符串不包含拆分值,则整个字符串将作为列表中的第一项返回。

    如果计划稍后使用此拆分值,则仍可以使用 .Split() 方法,通过简单检查计数是否等于1来确定拆分字符串是否包含在字符串中:

    List<string> l = value.Split(new[] {"++"}).ToList();
    
    if (l.Count == 1) {
        //++ was not found in the string
    } else {
        //++ was found in the string (l.Count-1) times
    }
    

    注意:这是 效率较低 拆分字符串并分配数组,而不仅仅是使用诸如 .Contains() . 使用上面的解决方案,如果您稍后在代码中实际使用上面的拆分项。

        4
  •  0
  •   adjan    6 年前

    如果没有 "++" 在字符串中,您将得到原始字符串。如果有n “++” 在字符串中,返回n+1个拆分。您的代码很好,只是需要传递一个数组:

    var l = value.Split(new string[] {"++"}, StringSplitOptions.None).ToList();
    

    所以什么时候 l.Count() == 1 那就没有了 “++” 在字符串中