比较两个字符串中的字符
在C#中,如何比较两个字符串中的字符。
例如,假设我有这两个字符串
“bc3231dsc”和“bc3462dsc”
如何以编程方式找出字符串
都以“bc3”开头并以“dsc”结尾?
因此,给定的将是两个变量:
var1 = "bc3231dsc";
var2 = "bc3462dsc";
比较 var1 到 var2 中的每个字符后,我希望输出为:
leftMatch = "bc3";
center1 = "231";
center2 = "462";
rightMatch = "dsc";
条件:
1. 字符串的长度始终为 9 个字符。
2. 字符串不区分大小写。
In C#, how do I compare the characters in two strings.
For example, let's say I have these two strings
"bc3231dsc" and "bc3462dsc"
How do I programically figure out the the strings
both start with "bc3" and end with "dsc"?
So the given would be two variables:
var1 = "bc3231dsc";
var2 = "bc3462dsc";
After comparing each characters from var1 to var2, I would want the output to be:
leftMatch = "bc3";
center1 = "231";
center2 = "462";
rightMatch = "dsc";
Conditions:
1. The strings will always be a length of 9 character.
2. The strings are not case sensitive.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
string 类有 2 个可以使用的方法(StartsWith 和 Endwith)。
The string class has 2 methods (StartsWith and Endwith) that you can use.
在阅读了您的问题和已经给出的答案后,我认为缺少一些限制,这对您来说可能是显而易见的,但对社区而言却并非如此。但也许我们可以做一些猜测:
事实上,字符串只是字符的枚举,您可以在此处使用 LINQ 来了解匹配的字符,如下所示:
这样我们就可以继续,现在找出每个连续 true 和 false 标志块的长度使用此方法:
目前我不知道是否已有 LINQ 函数提供相同的功能。据我已经读过,它应该可以使用
SelectMany()
(因为理论上你可以使用此方法完成任何 LINQ 任务),但作为临时实现,上面的方法更容易(对我来说) 。然后可以以如下方式使用这些函数:
然后您会给出以下输出:
左侧: bc3
右侧:bc3
左侧:231
右侧:462
左侧:dsc
右侧:dsc
最大的缺点是在某种程度上使用
Tuple
导致它导致丑陋的属性名称Item1
和Item2
相距甚远立即可读。但如果确实需要,您可以引入自己的简单类,其中包含两个整数并具有一些坚如磐石的属性名称。目前,关于每个块是否由两个字符串共享或者它们是否不同的信息也丢失了。但同样,将这些信息也放入元组或您自己的类中应该相当简单。After reading your question and the already given answers i think there are some constraints are missing, which are maybe obvious to you, but not to the community. But maybe we can do a little guess work:
Due to the fact, that a string is only a enumeration of chars you could use LINQ here to get an idea of the matching characters like this:
With this we can proceed and now find out how long each block of consecutive true and false flags are with this method:
Currently i don't know if there is an already existing LINQ function that provides the same functionality. As far as i have already read it should be possible with
SelectMany()
(cause in theory you can accomplish any LINQ task with this method), but as an adhoc implementation the above was easier (for me).These functions could then be used in a way something like this:
Which would you then give this output:
Left side: bc3
Right side: bc3
Left side: 231
Right side: 462
Left side: dsc
Right side: dsc
The biggest drawback is in someway the usage of
Tuple
cause it leads to the ugly property namesItem1
andItem2
which are far away from being instantly readable. But if it is really wanted you could introduce your own simple class holding two integers and has some rock-solid property names. Also currently the information is lost about if each block is shared by both strings or if they are different. But once again it should be fairly simply to get this information also into the tuple or your own class.你需要的伪代码..
resultstart 让你开始字符串.. 你可以向后做同样的事情...
Pseudo code of what you need..
resultstart has you start string.. you can do the same going backwards...
您可以使用的另一个解决方案是正则表达式。
这让您在匹配时更加灵活。上面的模式匹配以 bc3 开头并以 dsc 结尾的任何字符串,中间包含除换行符之外的任何内容。通过改变.*?对于 \d,您可以指定只需要两个字段之间的数字。从那里开始,可能性是无限的。
Another solution you can use is Regular Expressions.
This gives you more flexibility when matching. The pattern above matches any string that starts in bc3 and ends in dsc with anything between except a linefeed. By changing .*? to \d, you could specify that you only want digits between the two fields. From there, the possibilities are endless.
对于更新条件
for UPDATE CONDITION