我看起来像这样的字符串:str = P1 | P2 | P3 ....
我需要检查字符串是否包含例如P1。 我这样做:
if (str.Contains("P1"))
{...}
当我找到P1并且str不包含P1但是P10时,我的问题出现了,它返回true,这是合乎逻辑的,但不是我需要的。
如果字符串中有P10,我如何严格检查P1而不返回true。
感谢您的帮助
答案 0 :(得分:3)
您可以将字符串拆分为数组,然后像这样检查
bool bFound = str.split('|').Contains("p1")
答案 1 :(得分:2)
如果您还需要检查P10
,请按相反顺序进行检查,这意味着您需要在P10
之前选择P1
。
如果每个Psomething
后跟|
,您可以检查P1|
。如果它是一个分隔符并且不会出现在字符串的最末端,这将不起作用。
正则表达式将是另一种解决方案:
Regex.IsMatch(str, "P1(?!\d)") // Matches P1 if not followed by another digit
通常,如果遇到这个问题,那么它的数据结构选择很差。字符串并不是事物的集合,而是您在此处尝试建模的内容。
答案 2 :(得分:1)
为什么不拆分字符串并检查:
string input = "P1|P2|P3|P10";
string[] split = input.Split('|'); // { "P1", "P2", "P3", "P10" }
bool containsP1 = split.Contains("P1"); // true
答案 3 :(得分:0)
str.Split('|').Contains("P1");
答案 4 :(得分:0)
使用正则表达式可能是个好例子,因为您需要确保您要查找的字符串由管道或字符串末尾分隔。
例如:
string input = "P1|P2|P3|P10";
string pattern = @"P1(\||$)";
Regex.IsMatch(input, pattern);
答案 5 :(得分:0)
您必须检查您要查找的字符串是否后跟' |'或者位于您检查的字符串的末尾。
String str = "P1|P3|P20";
String strToFind = "P2";
System.Text.RegularExpressions.Regex.IsMatch(str, strToFind+@"(\||\Z)");