当一组子字符串连接起来形成结果字符串时,如何防止字符串出现在结果字符串中?

时间:2013-01-28 12:35:52

标签: c# regex string parsing filter

我有5个字符串,我们称之为

  • EarthString
  • FireString
  • WindString
  • WaterString
  • HeartString

所有这些都可以有不同的长度,其中任何一个都可以是空的,或者可以很长(但永远不会为空)。

这5个字符串是非常好的朋友,每个周末都会使用这个c#语句将它们连接起来形成结果字符串

ResultString = EarthString + FireString + WindString + WaterString + HeartString

根据这些字符串的值,有时(仅有时),ResultString将包含“Captain Planet”作为子字符串。

我的问题是,如何在连接之前操纵5个字符串中的每一个,这样当它们合并时,“Captain Planet”将永远在结果字符串中显示为子字符串?

我现在能想到的唯一方法是按顺序检查每个字符串中的每个字符,但这看起来非常繁琐。由于5个好朋友字符串中的每一个都可以是任意长度,因此在我们确定是否需要删除任何字符之前,单独检查字符还需要某种连接。

编辑:结果字符串是连接在一起的5个字符串的过滤版本,除了“Captain Planet”字符串被删除之外,所有其他内容保持不变。是的,我正在寻找一种解决方案,允许在连接之前操作5个字符串。 (这实际上是我遇到的更大编程问题的简化)。谢谢你们。

4 个答案:

答案 0 :(得分:1)

是否有一个特殊原因你不能这样做?

ResultString.Replace("CaptainPlanet", "x"); 

答案 1 :(得分:1)

如果你想预先连接,你可以

根据他们所竞争的“CaptainPlanet”部分,为每个字符串的开头和结尾分配一个数值。例如:如果Air =“net the big captain”那么它的起始值为3,终值为7。为了确定你是否可以安全地连接2个值,你只需要检查左边的字符串的结尾+右边的字符串的开头是否不等于“CaptainPlanet”的总长度。如果你有非常大的字符串,这将允许你只检查字符串的前x个和后x个字符来计算开始/结束值。

此解决方案不考虑短字符串,如ei air =“Cap”,earth =“tain”和fire =“Planet”。在这种情况下,你需要有一个比“CaptainPlanet”长度更短的令牌的特殊情况。

答案 2 :(得分:0)

如果删除多少个字符无关紧要,可以删除f.e.所有字符串中的所有'C'

答案 3 :(得分:0)

原始答案清除了所有字符串,但正如J.Steen所指出的那样,已经有了预期输出的表述。我们走了。

  1. 在每个子字符串上运行elementString.Replace("Captain Planet", "")

  2. 现在,您必须在每个子字符串上标识“Captain Planet”的所有前缀/后缀,并保留该信息,以便在连续之前对其进行处理。也就是说,例如如果子字符串以“Capt”结尾,那么你应该有一个信息“子字符串最后包含'Captain Planet'的4个首字母的前缀”。您还必须考虑完整子串的情况(例如,其中一个字符串是“ptain Pla”)。如果任何一个问题也会变得更加复杂。前缀可以是递归的或重复的(例如“CaptainCap”包含2种有效前缀“CaptainCaptain”,并且“apt”可以在结果字符串中的两个位置找到);

  3. 您在连接之前处理该信息,以便结果字符串与ResultString.Replace("Captain Planet", "")具有相同的内容。恭喜你,你的程序比必要的要复杂得多!

  4. 但简而言之,不能同时获得您想要的结果(除了组合结果输出之外所有子字符串都完整无缺)并在连接步骤之前完成处理。