使用C#,最有效的方法是什么?
string one = "(999) 999-9999";
string two = "2221239876";
// combine these into result
result = "(222) 123-9876"
String one总是有9个。
我正在考虑在字符串1上使用某种foreach,当它看到9时,将其替换为字符串2中的下一个字符。不太确定从那里去哪里......
答案 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异常。)