C# 如何增加字符串中整数的值

C# 如何增加字符串中整数的值,c#,winforms,string,substring,C#,Winforms,String,Substring,好的,我现在有这个代码 public int i = 0; //this is outside of the private void button1_click string str = txtEmail.Text; int pos = str.LastIndexOf("@"); string str2 = str.Substring(pos); string str3 = str.Substring(0, str

好的,我现在有这个代码

        public int i = 0; //this is outside of the private void button1_click
        string str = txtEmail.Text;
        int pos = str.LastIndexOf("@");
        string str2 = str.Substring(pos);
        string str3 = str.Substring(0, str.LastIndexOf("@"));
        txtEmail.Text = str3 + i++ + str2;

它将电子邮件拆分为2个字符串,然后将它们与它们之间的整数组合,但我希望它更改整数。但这段代码只是让说文本变得awesome1@email.com当我按下按钮将1增加到2时,它只是这样做。awesome12@email.com等等我如何让它只在1中添加1,而不在1旁边添加2?

不确定
i
在这段代码中来自何处,但希望这能起作用

    string str = txtEmail.Text;
    int pos = str.LastIndexOf("@");
    string str2 = str.Substring(pos);
    string str3 = str.Substring(0, str.LastIndexOf("@"));
    txtEmail.Text = str3 + (i++).ToSting() + str2;
这应该起作用:

String email = "awesome1@email.com";
String[] tokens = email.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries);
const String allowed = "0123456789";
String part1 = "";
String numberStr = "";
foreach (char c in tokens[0].Reverse())
{
    if (allowed.Contains(c) && part1.Length==0)
    {
        numberStr += c;
    }
    else
    {
        part1 += c;
    }
}
part1 = new String(part1.Reverse().ToArray());
int number = int.Parse(new String(numberStr.Reverse().ToArray()));
String result = String.Format("{0}{1}@{2}", part1, number++, tokens[1]);
虽然看起来有点笨重。如果有正则表达式答案,请接受它。

这将起作用

public static string IncNumberBeforeAt(string text)
{
  int lastAt = text.LastIndexOf('@');
  if (lastAt != -1)
  {
    int pos = lastAt - 1;
    string num = "";
    while (text[pos] >= '0' && text[pos] <= '9')
    {
      num = text[pos] + num;
      pos--;
      if (pos < 0)
        break;          
    }
    int numInc = int.Parse(num) + 1;
    return text.Replace(num.ToString() + "@", numInc.ToString() + "@");
  }
  else
  {
    return text;
  }
}

您必须跟踪您的原始电子邮件地址:

e、 g


我测试了以下内容,看起来它解决了您的问题。更改您的这一行:

string str = txtEmail.Text; 
为此:

string str = txtEmail.Text.Replace(string.Format("{0}@", i - 1), "@");
它将其设置为,您的电子邮件地址将采用以下形式:

awesome1@email.com 
awesome2@email.com 
awesome3@email.com 
etc.

如果Jon的答案不是你想要的,我想你需要向我们展示你正在使用的循环(我怀疑)。变量I是什么,在哪里初始化?变量I=0当前位于button_click事件之外,它是一个公共整数,@AlexInParis im没有使用循环你需要跟踪原始字符串,或者至少是为了准确替换int值而插入的数字的最后一个索引。不起作用仍然只是添加到字符串上并使其变长。不使用+1版本的数字替换数字本身同意,尽管我认为在这种情况下,使用字符串不会有太大的内存问题。Concat,避免生成StringBuilder的GC开销。因此,这可能会回答:@RickHoving我不认为StringBuilder是这样工作的?因为这样做给了我一个错误,说stringbuilder“没有包含3个参数的构造函数”๐1@email.com“
char.IsNumber
(甚至
char.IsDigit
)允许使用许多字符。这仍然可以做同样的事情,也就是说它不起作用:/感谢您的尝试,如果您继续使用原始电子邮件地址,也就是没有整数的地址,这将起作用。
string str = txtEmail.Text.Replace(string.Format("{0}@", i - 1), "@");
awesome1@email.com 
awesome2@email.com 
awesome3@email.com 
etc.