我已经编写了下面所示的方法,用给定的文本替换一些电子邮件域,如@gmail.com
和@yahoo.com
:
public static string RemovePersonalInfo(string input)
{
string[] tokens = input.Split(new char[] { ' ', '\t', '\r', '\n' });
string output = string.Empty;
foreach (string token in tokens)
{
if (token.Contains("@gmail.com"))
{
output += " SOMETEXT";
}
else
{
output += " " + token;
}
}
tokens = output.Split(new char[] { ' ', '\t', '\r', '\n' });
output = string.Empty;
foreach (string token in tokens)
{
if (token.Contains("@yahoo.com"))
{
output += " SOMETEXT";
}
else
{
output += " " + token;
}
}
return output;
}
对于以下输入,它按预期工作。
但我不认为这是一个好的解决方案,我可以看到代码的改进,但它是不可伸缩的,让我们看看明天一些其他的电子邮件域来了,我将不得不再次修改代码,并编写另一个if条件。第二个改进是,我运行了两次循环,它可以在一个循环中完成。所以性能可以得到改善。
或者如果有比这更好的办法,请提出来。
输入:
test@gmail.com test@abc.com @teest@yahoo.com
输出:
SOMETEXT test@abc.com SOMETEXT
- 注意**:我不应该使用Replace方法,所以这里的唯一目的是在基本的编程语言如C和C++中也使用相同的逻辑。
2条答案
按热度按时间vuktfyat1#
为了进一步解释我的观点,我意识到使用字典并没有多大意义,因为你并不需要它提供的任何功能,你真正需要的只是一个查找替换对的列表:
实际的对可以来自配置、数据库、代码等。
如果SOMETEXT总是相同的,你可以只使用一个简单的可枚举字符串:
如果输出不应该有前导空格,请使用
outputSb.ToString(1, sb.Length-1)
chhqkbe12#
谢谢你@Caius,你的回答真的帮了我大忙。
我也尝试过下面的方法来解决这个问题。我已经在我的例子中硬编码了这些值,但是这些值是可以配置的。