当我尝试用++
拆分some text here
的字符串值时。我预计结果是一个空列表。由于在字符串some text here
中找不到++
,因此List
上的Count
结果应该0
。
但是,我得到的结果是1
(当我Count
List
时(。
我如何确定字符串中是否有++
?(计数不起作用(
List<string> l = value.Split("++").ToList();
观察到的行为是设计使然。如果未找到分隔符,则返回包含单个项的集合。正如文档所述:
如果此实例不包含分隔符中的任何字符,则返回的数组由包含此实例的单个元素组成。
如果要检查分隔符是否存在,可以使用.Contains("++")
或.IndexOf("++") != -1
默认情况下,如果未找到匹配项,则返回大小为 1 的数组中的字符串。
我如何确定字符串中是否没有++?
if (value.Contains("++"))
编辑:在我写这篇文章的时候已经有很多答案了。 :D
正如@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()
等方法进行检查的效率。如果您实际上可以在代码后面使用上述拆分项,请使用上述解决方案。
如果字符串中没有"++"
,则取回原始字符串。如果字符串中有 n 个"++"
,则返回 n+1 个拆分。您的代码很好,除了它需要传递一个数组:
var l = value.Split(new string[] {"++"}, StringSplitOptions.None).ToList();
所以当l.Count() == 1
时,字符串中没有"++"