首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复字符串比较逻辑

复字符串比较逻辑
EN

Stack Overflow用户
提问于 2016-06-15 00:13:09
回答 2查看 122关注 0票数 0

我需要一些复杂的(无论如何,因为我不太经验)字符串比较逻辑的帮助。基本上,我想验证一个字符串,以确保它符合格式规则。我正在使用C#,目标是.NET 4.5.2。

我正在尝试使用一个API,该API以这种方式给出了字符串的预期格式:

1:420+4:9#### (从位置1开始有“420”,位置4有“9”,位置5-8有数字数字)。 2:Z+14:&&+20:10,11,12 (位置2必须有“Z”,位置14、15处必须有字母,从20位置开始必须有“10”、“11”或“12” 图例: ":“=位置/估价师分隔符 ",“=值分隔符 "+“=测试分离器 "#“=数字通配符 "&“= alpha字母通配符

考虑到这一点,我的第一个想法是对输入字符串执行一系列子字符串和拆分操作,然后对每个部分进行比较?或者,我可以执行一个for循环,然后逐个遍历每个字符,直到到达输入字符串长度的末尾。

在这种情况下,让我们假设输入字符串类似于"420987435744585“。使用第一条规则,我应该通过这个,因为前三个是420,位置4是9,下一个5-8是数字。

到目前为止,我已经创建了一个方法,如果我通过/失败验证,将返回bool。输入字符串被传入。然后,我开始在+或-上拆分,以获得所有的和或非部分,然后在逗号上拆分以获得规则组。但这就是我被困的地方。这似乎应该很容易,也许是,但我只是不能把我的头围绕着它,我正在想,我将以大量的数组,前缘循环,如果语句,等等.如果输入字符串与我的格式匹配,只需验证并返回true/false。

有人能帮忙给我指点吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-15 06:47:39

我认为最好的方法是一个自定义函数,它将比RegEx更快,将该格式转换为RegEx需要大量的手工工作。

我已经从验证函数开始了,它对您提供的示例进行测试。

以下是代码:

代码语言:javascript
复制
static bool CheckFormat(string formatString, string value)
{
    string[] tests = formatString.Split('+');

    foreach(string test in tests)
    {
        string[] testElement = test.Split(':');
        int startPos = int.Parse(testElement[0]);
        string patterns = testElement[1];

        string[] patternElements = patterns.Split(',');

        foreach(string patternElement in patternElements)
        {

            //value string not long enough, so fail.
            if(startPos + patternElement.Length > value.Length)
                return false;

            for (int i = 0; i < patternElement.Length; i++)
            {
                switch(patternElement[i])
                {
                    case '#':
                        if (!Char.IsNumber(value[i]))
                            return false;
                        break;

                    case '&':

                        if (!Char.IsLetter(value[i]))
                            return false;
                        break;

                    default:

                        if(patternElement[i] != value[i])
                            return false;
                        break;

                }
            }
        }
    }

    return true;
}

如果你想玩它,dotnet小提琴就在这里:https://dotnetfiddle.net/52olLQ

祝好运。

票数 0
EN

Stack Overflow用户

发布于 2016-06-15 00:34:00

处理这些条件的最佳方法是使用正则表达式(Regex)。一开始,您可能会发现它有点复杂,但值得花时间学习它,以一种简单的、非冗长的方式处理所有类型的字符串模式。

您可以从以下教程开始:

http://www.codeproject.com/Articles/9099/The-Minute-Regex-Tutorial

expressions.htm

并以此作为参考:

https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37824153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档