我的问题:
这个是我尝试的结果,但是结果不是我所想得到的结果。帮忙查看问题出在哪里?
protected void Button1_Click(object sender, EventArgs e)
{
string TotalName = TextBox1.Text;
string[] ph = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
if (!string.IsNullOrEmpty(TotalName))
{
foreach (string p in ph)
{
if(TotalName.Contains(p))
{
string cast = TotalName.Insert(TotalName.IndexOf(p), "-");
Label1.Text = cast;
}
}
}
string TotalName = textBox1.Text;
string[] ph = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
if (!string.IsNullOrEmpty(TotalName))
{
foreach (string p in ph)
{
if (TotalName.Contains(p))
{
//下面这句话有2个问题,第一点:因为string是特殊的引用类型,它调用Insert方法就会重复copy生成一个新的字符串,而原字符串并没有被改变.
//也就是说你的示例中TotalName不会被改变,所以cast只会显示最后一次Insert以后的结果,理论上label1.Text应该最后会显示 "-TestTitleReplace"
//第二点,你"TotalName.IndexOf(p)"这样找大写字母的位置,其实就只是假设一个字母只会出现一次,没考虑到出现多次的情况.
string cast = TotalName.Insert(TotalName.IndexOf(p), "-");
label1.Text = cast;
}
}
}
其实一句话就能解决的啦,给你个代码:
string TotalName = textBox1.Text;
string cast = System.Text.RegularExpressions.Regex.Replace(TotalName, @"([A-Z])", " $1", System.Text.RegularExpressions.RegexOptions.Compiled);
label1.Text = cast;
弓虽
高手就是不一样,真的非常谢谢!
循环,判断,找出大写的位置,再在前面加空格。
用正则表达式的是正解