как увеличить значение целого числа в строке - PullRequest
0 голосов
/ 26 марта 2012

Хорошо, у меня в настоящее время есть этот код

        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 и не ставить 2 рядом с 1?

Ответы [ 5 ]

1 голос
/ 26 марта 2012

Я проверил следующее, и похоже, что это решает вашу проблему. Измени эту строку:

string str = txtEmail.Text; 

К этому:

string str = txtEmail.Text.Replace(string.Format("{0}@", i - 1), "@");

Он настроен так, что ваши адреса электронной почты будут иметь вид:

awesome1@email.com 
awesome2@email.com 
awesome3@email.com 
etc.
0 голосов
/ 26 марта 2012

Вы должны будете отслеживать свой оригинальный адрес электронной почты:

например,

string originalEmail = "test@gmail.com";

var parts = originalEmail.Split('@');

txtEmail.Text = string.Format("{0}{1}@{2}", parts[0], i++, parts[1]);
0 голосов
/ 26 марта 2012

Это должно работать:

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]);

Хотя это выглядит немного громоздко.Примите ответ Regex, если он есть.

0 голосов
/ 26 марта 2012

Это будет работать

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;
  }
}

тест

IncNumberBeforeAt("awesome1@email.com"); // => returns awesome2@email.com
IncNumberBeforeAt("awesome234@email.com"); // => returns awesome235@email.com
IncNumberBeforeAt("email.com"); // => returns email.com
IncNumberBeforeAt("5@email.com"); // => returns 6@email.com
0 голосов
/ 26 марта 2012

Не уверен, откуда взято 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...