2010-02-19 246 views
3

使用C#,完成此操作的最有效方法是什么?C#如何用另一个部分替换一个字符串的部分

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

// combine these into result 

result = "(222) 123-9876" 

字符串之一将始终有9个。

我在想一些字符串one的foreach,当它看到一个9时,用字符串2中的下一个字符替换它。不太清楚从哪里出现,虽然去...

+0

问号是否意味着在第一个位置可能有或没有数字。例如,如果掩码为9?9999的示例0123会导致0123? – 2010-02-19 22:48:20

+0

你只是想将10个数字的字符串格式化为电话号码吗?因为,有一种更简单的方法来做到这一点在c# – 2010-02-19 22:50:00

+0

@Yuriy - 通过打出问号来简化问题。 @Chris - 是的,我可以使用String.Format作为电话号码。但我在这里想知道任何类型的面具。学术排序:) – macca1 2010-02-19 22:52:53

回答

12

如果要一定的格式应用到一个号码,你可以试试这个:

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

欲了解更多信息,请参阅Custom Numeric Format Strings在.NET框架文档。

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

显然,你应该检查,以确保如果任一字符串为“长”比其他(即“一”也不会发生IndexOutOfRange异常包含比'2'长度更多的九等)

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); 
    } 
} 
相关问题