我有以下
string[] statelookup = ConfigurationManager.AppSettings["WstmStateLookUp"].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
带有这些值
“AL,AR,CT,MD,DE,FL,GA,IA,IL,IN,KY,LA,MA,ME,MI,MN,MO,MS,NC,NH,NJ,NY,OH, PA,RI,SC,TN,VA,VT,WI,WV“
我需要查看文件中的任何行是否包含上述值之一。这个
是一个样本行<FIPS>20170<STATE>AL<WFO>AJK
当我使用以下内容时,我只获得statelookup中第一项(在本例中为AL)的结果。
statelookup.Any(a => currentLine.Contains("<STATE>"+a))
我可以移动项目(比如首先输入OH并获取OH结果)但我似乎无法返回包含任何statelookup值的文件中的所有行。
我必须使用
"<STATE"+a
因为AL,AK和RI可以出现在文件的其他行中。这样我只会查找这个特定的实例。
我缺少什么?
答案 0 :(得分:2)
问题是你的数组不包含你认为它的作用...如果你在逗号上分割"AL, AR, CT"
,那么你得到{"AL"," AR"," CT"}
。正如您所看到的,除了第一个条目之外的每个条目都有一个前导空格,导致您的匹配不起作用。
您拥有的三个选项是存储不带空格的字符串,拆分为“,”或更好地在拆分之后使用Trim
方法去除空格,然后再将它们放入数组中。最后一个是我的首选,因为如果由于某种原因你有两个或三个空格(或更多),它会起作用。
这样的事情会起作用:
string[] statelookup = ConfigurationManager.AppSettings["WstmStateLookUp"].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x=>x.Trim()).ToArray();
答案 1 :(得分:0)
如评论中@ user1304444所述,您正在错误地拆分数组。我在这里制作了代码的工作版本:
https://dotnetfiddle.net/pFO6iV
您会注意到可以找到状态AL,因为没有前面的空格,因此它在字符串数组中变为"AL"
。
我已使用string.Replace()
删除了空格,但您可以通过多种方式执行此操作。
string[] statelookup ConfigurationManager
.AppSettings["WstmStateLookUp"]
.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);