C # Как заменить части одной строки на части другой - PullRequest
3 голосов
/ 20 февраля 2010

Как использовать C #, какой самый эффективный способ сделать это?

string one = "(999) 999-9999";
string two = "2221239876";

// combine these into result

result = "(222) 123-9876"

Строка 1 всегда будет иметь 9.

Я думаю, что-то вроде foreach для первой строки, и когда он видит 9, замените его следующим символом в второй строке Не совсем уверен, куда идти оттуда, хотя ...

Ответы [ 3 ]

12 голосов
/ 20 февраля 2010

Если вы хотите применить определенный формат к числу, вы можете попробовать это:

long number = 2221239876;
string result = number.ToString("(###) ### ####");    // Result: (222) 123 9876

Для получения дополнительной информации см. Пользовательские строки числового формата в документации .NET Framework.

1 голос
/ 20 февраля 2010
string one = "(999) 999-9999";
string two = "2221239876";

StringBuilder result = new StringBuilder();

int indexInTwo = 0;
for (int i = 0; i < one.Length; i++)
{
    char character = one[i];
    if (char.IsDigit(character))
    {
        if (indexInTwo < two.Length)
        {
            result.Append(two[indexInTwo]);
            indexInTwo++;
        }
        else
        {
            // ran out of characters in two
            // use default character or throw exception?
        }
    }
    else
    {
        result.Append(character);
    }
}
0 голосов
/ 20 февраля 2010

Я не совсем уверен, насколько сильно вы ожидаете, что шаблон (строка 'one') будет отличаться. Если он всегда будет выглядеть так, как вы его показали, возможно, вы могли бы просто заменить девятки на «#» и использовать .ToString (...).

В противном случае вам, возможно, придется сделать что-то вроде

        string one = "(9?99) 999-9999";
        string two = "2221239876";

        StringBuilder sb = new StringBuilder();
        int j = 0;
        for (int i = 0; i < one.Length; i++)
        {
            switch (one[i])
            {
                case '9': sb.Append(two[j++]);
                    break;
                case '?': /* Ignore */
                    break;
                default:
                    sb.Append(one[i]);
                    break;
            }
        }

Очевидно, вам следует убедиться, что исключений IndexOutOfRange не возникнет, если одна из строк «длиннее» другой (то есть «одна» содержит больше девяток, чем длина «два» и т.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...