当一组子字符串连接起来形成结果字符串时,如何防止字符串出现在结果字符串中
本文关键字:字符串 结果 何防止 一组 起来 连接 | 更新日期: 2023-09-27 17:56:32
我有 5 个字符串,我们来称它们为
-
EarthString
-
FireString
-
WindString
-
WaterString
-
HeartString
它们都可以有不同的长度,它们中的任何一个都可以是空的,也可以很长(但永远不会为空)。
这 5 个字符串是非常好的朋友,每个周末它们都使用此 c# 语句连接起来形成一个结果字符串
ResultString = EarthString + FireString + WindString + WaterString + HeartString
根据这些字符串的值,有时(只是有时)ResultString
将包含"星球队长"作为子字符串。
之前,我如何操作它们中的每一个,以便当它们组合时,"星球队长"永远不会在结果字符串中显示为子字符串?
我现在能想到的唯一方法是按顺序检查每个字符串中的每个字符,但这似乎非常乏味。由于 5 个好朋友字符串中的每一个都可以是任意长度,因此单独检查字符也需要某种连接,然后才能确定是否需要删除任何字符。
编辑:生成的字符串是连接在一起的5个字符串的过滤版本,除了删除"星球队长"字符串外,所有其他内容保持不变。是的,我正在寻找一种解决方案,允许在连接之前操作 5 个字符串。(这实际上是我遇到的一个更大的编程问题的简化)。谢谢大家。
做预连接,你可以
根据每个字符串的"星球队长"部分为每个字符串的开头和结尾分配一个数值。 例如:如果 Air = "净大船长",那么起始值为 3,结束值为 7。 要确定您是否可以安全地连接 2 个值,您只需检查左字符串的结尾 + 右字符串的开头是否不等于"星球队长"的总长度。 如果您有非常大的字符串,这将允许您仅检查字符串的前 x 和最后 x 个字符以计算开始/结束值。
此解决方案不考虑像ei air = "Cap",earth ="tain"和fire="Planet"这样的短字符串。 在这种情况下,您需要为短于"星球队长"长度的令牌设置一个特殊情况。
有什么特别的原因你不能这样做吗?
ResultString.Replace("CaptainPlanet", "x");
多少个字符无关紧要,您可以删除所有字符串中的所有'C'
。
最初的答案清除了所有的字符串,但正如 J.Steen 所指出的,已经有一个预期输出的公式。所以我们开始了。
-
对每个子字符串运行
elementString.Replace("Captain Planet", "")
。 -
现在,您必须在每个子字符串上识别"星球队长"的所有前缀/后缀,并保留该信息,以便在连接之前对其进行处理。也就是说,例如,如果子字符串以"Capt"结尾,那么您应该有一个信息"子字符串末尾包含'星球队长'前 4 个字母的前缀"。您还必须考虑完整子字符串的情况(例如,其中一个字符串是"ptain Pla")。如果任何前缀可以是递归的或重复的,问题也会变得更加复杂(例如,"CaptainCap"包含 2 种 "CaptainCaptain" 的有效前缀,并且"apt"可以在结果字符串中的两个位置找到);
-
在串联之前处理该信息,以便结果字符串与
ResultString.Replace("Captain Planet", "")
相同。恭喜,您的程序比必要的要复杂得多!
但简而言之,您无法同时获得所需的结果(除组合结果输出外的所有子字符串都完好无损),也无法完全在串联步骤之前进行处理。