解析字符串以获取特定值

时间:2017-07-19 18:36:47

标签: c#

我是C#的新手。我在2D条形码中解析了很多数字。实际批号' A2351'隐藏在此条形码字符串中" + M727PP011 / $$ 3201001A2351S"。我想在单独的字符串块中打破这个条形码,但分隔符不一致。

4位数批号前面的字母前缀可以是' A' P'或者' D'批号后面有一个字母可以忽略。

string Delimiter = "/$$3"; 

//barcode format:M###PP###/$$3  ddmmyy lotnumprefix 'A' followed by lotNum    
string lotNum= "+M727PP011/$$3201001A2351S";  

string[] split = lotNum.Split(new[] {Delimiter}, StringSplitOptions.None);

如何在日期之后提取批号?

2 个答案:

答案 0 :(得分:1)

根据您的初始示例,然后是您展示如何解决此问题的后续编辑,听起来批号总是在同一个地方。使用对string.Substring(int,int)的单个调用而不是您正在使用的两行(也需要拉入VB库)会更干净(并且更符合标准C#代码)。您只需要调用Substring并为其指定起始索引和长度。

所以这段代码:

string lotNum = Strings.Right(barcode, 6);
lotNum = lotNum.Remove((lotNum.Length - 1), 1);

可以使用这个单子串调用来完成:

string lotNum = barcode.Substring(barcode.Length - 6, 5);

修改
进一步澄清为什么使用Substring调用可能更好。在C#string中,对象是不可变的。这意味着当您调用Strings.Right时,您将返回一个新的字符串对象。当你打电话给lotNum.Remove时,你没有"删除"来自现有字符串的字符,将分配一个新字符串,并删除该字符并返回给您。因此,在您尝试提取批号时,您的代码会有两个新的字符串分配。当您调用Substring时,您将返回一个新字符串,但不是获取一个新字符串,而是立即修改并获取第二个新字符串,您只需要分配一个新字符串来提取批号。在您给出的示例中,可能没有任何明显的性能/内存问题,但如果此代码处于紧密循环或类似情况,则可能会导致问题。

答案 1 :(得分:0)

如果您只是想获取批号,它实际上取决于输入字符串的格式(是否是一致的长度,是否有相对于您尝试解析的数据的可靠前缀/后缀你可以参考,等)。看起来您的数据可以通过其在字符串中的静态位置来定义,因此看起来您可以使用substring  (索引为20?)的方法来完成你想要的。