当我尝试用some text here
分割字符串值++
时。我希望结果是一个空列表。由于在字符串++
中找不到some text here
,因此Count
上List
的结果应该是0
。
但是,我得到的结果是1
(当我Count
上的List
时)。
如何确定字符串中是否没有++
? (计数无效)
List<string> l = value.Split("++").ToList();
答案 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
时,字符串中就没有"++"