C#如何用另一个字符串的部分替换一个字符串的部分

时间:2010-02-19 22:44:50

标签: c# string replace

使用C#,最有效的方法是什么?

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

// combine these into result

result = "(222) 123-9876"

String one总是有9个。

我正在考虑在字符串1上使用某种foreach,当它看到9时,将其替换为字符串2中的下一个字符。不太确定从那里去哪里......

3 个答案:

答案 0 :(得分:12)

如果您想将某种格式应用于某个数字,可以尝试以下方法:

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

有关详细信息,请参阅.NET Framework文档中的Custom Numeric Format Strings

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我不太确定您对模式(字符串'one')的期望有多大差异。如果它总是看起来像你已经显示它,也许你可以用'#'替换9并使用.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;
            }
        }

显然,你应该检查以确保如果任何一个字符串比另一个字符串“更长”(即'one'包含的内容多于'two'的长度等,则不会发生IndexOutOfRange异常。)