当找不到给定字符时分割字符串时结果错误

时间:2018-10-09 18:37:54

标签: c# split

当我尝试用some text here分割字符串值++时。我希望结果是一个空列表。由于在字符串++中找不到some text here,因此CountList的结果应该是0

但是,我得到的结果是1(当我Count上的List时)。

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

List<string> l = value.Split("++").ToList();

4 个答案:

答案 0 :(得分:3)

观察到的行为是设计使然。如果找不到定界符,则返回具有单个项目的集合。为documentation states

  

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

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

答案 1 :(得分:1)

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

  

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

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

编辑:当我写这篇文章的时候,已经哇。 :D

答案 2 :(得分:0)

正如@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()之类的方法检查效率低得多。如果您稍后可能在代码中实际使用上述拆分项,请使用上述解决方案。

答案 3 :(得分:0)

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

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

因此,当l.Count() == 1时,字符串中就没有"++"