Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用包含多个特殊字符的char[]的if-else语句C#_C#_If Statement_Char - Fatal编程技术网

使用包含多个特殊字符的char[]的if-else语句C#

使用包含多个特殊字符的char[]的if-else语句C#,c#,if-statement,char,C#,If Statement,Char,我正在尝试使用char[]构建if-else语句对于特殊字符…如果TextBox1包含所有字符,我希望运行If语句…如果没有,则执行else语句…当我使用多个特殊字符时,运行If语句遇到问题…非常感谢任何帮助…请参阅以下示例: 当使用一个特殊字符(char[]chars={'^'};)时,下面的代码将运行 输入TextBox1的文本是: %TXSMITH^SMITH$JOHN^1411主圈^;95651501425264=160919780101?% C# 但是…当我添加多个特殊字符(char[

我正在尝试使用char[]构建if-else语句对于特殊字符…如果TextBox1包含所有字符,我希望运行If语句…如果没有,则执行else语句…当我使用多个特殊字符时,运行If语句遇到问题…非常感谢任何帮助…请参阅以下示例:

当使用一个特殊字符(char[]chars={'^'};)时,下面的代码将运行

输入TextBox1的文本是: %TXSMITH^SMITH$JOHN^1411主圈^;95651501425264=160919780101?%

C#

但是…当我添加多个特殊字符(char[]chars={'^'、'$'、'='、'%'、';'、'?'};)时,我的代码将无法运行

输入TextBox1的文本是: %TXSMITH^SMITH$JOHN^1411主圈^;95651501425264=160919780101?%

C#


您可以使用一点Linq,例如:

if (characters.All(c => TextBox1.Text.Contains(c.ToString()))
{
    ...
}
但最好重构代码,以便明智地使用正则表达式

下面是一个使用正则表达式的示例:

string s = "%TXSMITH^SMITH$JOHN^1411 MAIN CIRCLE^? ;95651501425264=160919780101?%";
string pattern = @"^%.*?\^(?<ln>.*?)\$(?<fn>.+?)\^(?<addr>.+?)\^.*=\d{4}(?<dob>\d+)\?%$";
var match = Regex.Match(s, pattern);
if (match.Success)
{
    string categories = 
        String.Join(" ", 
                    match.Groups["fn"], 
                    match.Groups["ln"], 
                    match.Groups["addr"], 
                    match.Groups["dob"]) 
        + Environment.NewLine;
    // categories == "JOHN SMITH 1411 MAIN CIRCLE 19780101"
}
string s=“%TXSMITH^SMITH$JOHN^1411 MAIN CIRCLE^;95651501425264=160919780101%”;
字符串模式=@“^%.*?\ ^(?.*?\$(?。+?)\ ^(?。+?)\ ^.*=\d{4}(?\d+)\?%$”;
var match=Regex.match(s,pattern);
如果(匹配成功)
{
字符串类别=
String.Join(“”,
匹配.组[“fn”],
匹配.组[“ln”],
match.Groups[“addr”],
匹配。组[“dob”])
+环境新线;
//类别==“约翰·史密斯1411主圈19780101”
}

您可以使用一点Linq,例如:

if (characters.All(c => TextBox1.Text.Contains(c.ToString()))
{
    ...
}
但最好重构代码,以便明智地使用正则表达式

下面是一个使用正则表达式的示例:

string s = "%TXSMITH^SMITH$JOHN^1411 MAIN CIRCLE^? ;95651501425264=160919780101?%";
string pattern = @"^%.*?\^(?<ln>.*?)\$(?<fn>.+?)\^(?<addr>.+?)\^.*=\d{4}(?<dob>\d+)\?%$";
var match = Regex.Match(s, pattern);
if (match.Success)
{
    string categories = 
        String.Join(" ", 
                    match.Groups["fn"], 
                    match.Groups["ln"], 
                    match.Groups["addr"], 
                    match.Groups["dob"]) 
        + Environment.NewLine;
    // categories == "JOHN SMITH 1411 MAIN CIRCLE 19780101"
}
string s=“%TXSMITH^SMITH$JOHN^1411 MAIN CIRCLE^;95651501425264=160919780101%”;
字符串模式=@“^%.*?\ ^(?.*?\$(?。+?)\ ^(?。+?)\ ^.*=\d{4}(?\d+)\?%$”;
var match=Regex.match(s,pattern);
如果(匹配成功)
{
字符串类别=
String.Join(“”,
匹配.组[“fn”],
匹配.组[“ln”],
match.Groups[“addr”],
匹配。组[“dob”])
+环境新线;
//类别==“约翰·史密斯1411主圈19780101”
}

我想你可以这样检查:

bool ContainsAllChars = true;
foreach (char NextChar in chars)
    if (TextBox1.Text.IndexOf(NextChar) == -1)
    {
        ContainsAllChars = false;
        break;
    }
if (ContainsAllChars)
    ...

我不认为您可以在这里使用IndexOfAny,因为它查找任何数组字符的出现情况,并且仅当它们都不存在时才返回-1。

我认为您可以通过以下方式进行检查:

bool ContainsAllChars = true;
foreach (char NextChar in chars)
    if (TextBox1.Text.IndexOf(NextChar) == -1)
    {
        ContainsAllChars = false;
        break;
    }
if (ContainsAllChars)
    ...
我不认为您可以在这里使用IndexOfAny,因为它查找任何数组字符的出现情况,并且仅当它们都不存在时才返回-1。

字符串.Contains()方法仅当存在精确匹配时才返回
true

要检查给定集合中的每个字符是否至少出现一个字符串,必须逐个检查它们,例如,使用
string.IndexOf(…)
方法。

只有当存在精确的匹配时,
string.Contains()
方法才会返回
true


要检查给定集合中的每个字符是否至少出现一个字符串,必须逐个检查它们,例如使用
string.IndexOf(…)
方法。

此正则表达式将匹配您的模式

public bool IsTheStringIWant(string s)
{
    Regex regex = new Regex("%.*\\^.*\\$.*\\^.*\\^\\?.*;.*=.*\\?%");
    return regex.IsMatch(s);
}

此正则表达式将匹配您的模式

public bool IsTheStringIWant(string s)
{
    Regex regex = new Regex("%.*\\^.*\\$.*\\^.*\\^\\?.*;.*=.*\\?%");
    return regex.IsMatch(s);
}

最简单的方法是使用正则表达式。如果其他字符集中都存在,则需要循环使用其中一组字符,并将标志设置为true。@Moo Juice这看起来像EDI/HL7:)或某种形式的刷卡数据。信用卡看起来非常相似。最简单的方法是使用正则表达式。如果其他字符集中都存在,则需要循环使用其中一组字符,并将标志设置为true。@Moo Juice这看起来像EDI/HL7:)或某种形式的刷卡数据。信用卡看起来非常相似。OP的问题不清楚,但在第一个
之间有一个换行符
您需要使用
RegexOptions.Singleline
来匹配它。但这正是我要发布的内容。@Bobson对我来说,它看起来像一个空间。如果你查一下systax的降价情况,这一切都在一条线上。嗯,说得好。这可能取决于读卡器是否解释为换行符或空格,但他肯定使用了空格。OP的问题不清楚,但在第一个
之间有一个换行符
您需要使用
RegexOptions.Singleline
来匹配它。但这正是我要发布的内容。@Bobson对我来说,它看起来像一个空间。如果你查一下systax的降价情况,这一切都在一条线上。嗯,说得好。这可能取决于读卡器是否将其解释为换行符或空格,但他肯定使用了空格。