找不到给定字符时拆分字符串时出现错误结果



当我尝试用++拆分some text here的字符串值时。我预计结果是一个空列表。由于在字符串some text here中找不到++,因此List上的Count结果应该0

但是,我得到的结果是1(当我CountList时(。

我如何确定字符串中是否有++?(计数不起作用(

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时,字符串中没有"++"

最新更新