日期:2014-05-18  浏览次数:20751 次

请教一个关于字符排列的问题
获得一个字符串比如:AbXAbY
想替换X和Y,X替换0-9,Y替换A-F,排列出所有的组合。

如Ab0Aba,Ab0Abb,Ab0Abc依次类推。

C# code

           StringBuilder InvCode = new StringBuilder(txtInv.Text.Trim());
            for (int i = 0; i <9; i++)
            {
                for (int c = 65; c < 71; c++)
                {
                    InvCode.Replace("X", i.ToString());
                    InvCode.Replace("Y",Convert.ToChar(c).ToString());
                    ListBox1.Items.Add(InvCode.ToString());
                }
                
            }


我写的这个在ListBox1里只会添加一种组合AbAb0Aba。不知道那里出错,头疼啊,特来请教,希望各位大哥指点一下。
在此谢过。

------解决方案--------------------
不过即使是这样,也只是在特殊情况下才正确,正确的条件是你的txtInv里只有一个X和一个Y,如果有两个X,应该就不对了,
------解决方案--------------------
因为你用的是StringBuilder,调用Replace以后就改变了对象本身了,所以第一次循环过后,InvCode的内容就变成"AbAb0Aba"了,不再包含X与Y,之后的循环就不再改变InvCode的内容,最终导致只能得到一个值。

可以不使用StringBuilder,直接用String.Replace连续替换:
ListBox1.Items.Add(InvCode.Replace("X", i.ToString()).Replace("Y",Convert.ToChar(c).ToString()));

另外0-9的终止条件应该是i<10或者i<=9