我有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个字符串。 (这实际上是我遇到的更大编程问题的简化)。谢谢你们。
答案 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所指出的那样,已经有了预期输出的表述。我们走了。
在每个子字符串上运行elementString.Replace("Captain Planet", "")
。
现在,您必须在每个子字符串上标识“Captain Planet”的所有前缀/后缀,并保留该信息,以便在连续之前对其进行处理。也就是说,例如如果子字符串以“Capt”结尾,那么你应该有一个信息“子字符串最后包含'Captain Planet'的4个首字母的前缀”。您还必须考虑完整子串的情况(例如,其中一个字符串是“ptain Pla”)。如果任何一个问题也会变得更加复杂。前缀可以是递归的或重复的(例如“CaptainCap”包含2种有效前缀“CaptainCaptain”,并且“apt”可以在结果字符串中的两个位置找到);
您在连接之前处理该信息,以便结果字符串与ResultString.Replace("Captain Planet", "")
具有相同的内容。恭喜你,你的程序比必要的要复杂得多!
但简而言之,不能同时获得您想要的结果(除了组合结果输出之外所有子字符串都完整无缺)并在连接步骤之前完成处理。