所以我有一个人的全名:
string fullName = "Bill Richardson";
假设我有这句话:
string sentence = "Richardson had a bike and he loved it";
但是这句话只包含了这个人的姓氏,所以我正在替换它:
string modifiedSentence = null;
string[] senSplit = sentence.Split(' ');
foreach(string word in senSplit)
{
if(fullName.Contains(word))
{
modifiedSentence = sentence.Replace(word,fullName);
}
}
现在我希望modifiedSentence是:
比尔理查森有一辆自行车,他喜欢它
但显然(我发现了问题),如果fullName甚至包含单词'a',它会被全名替换,最终会出现这样的结果:
比尔理查森有比尔理查森的自行车,他喜欢它那是一场灾难,不是吗? :)如果可能的话,如何以其他方式执行此操作?谢谢
答案 0 :(得分:0)
你可以这样做
modifiedSentence = new Regex(string.Join("|", fullName
.Split(' '))).Replace(sentence, fullName, 1);
Console.WriteLine(modifiedSentence);
答案 1 :(得分:0)
如果你不知道姓氏是否是fullName中的第一个或第二个,你必须迭代两者,而不是检查它是否包含单词,测试两个单词之间的等价。 如果fullName已包含在原始句子中,请注意这不起作用。
var nameParts=fullName.Split(' ');
string modifiedSentence = null;
string[] senSplit = sentence.Split(' ');
foreach(string part in nameParts)
{
foreach(string word in senSplit)
{
if(nameParts.Equals(word))
{
modifiedSentence = sentence.Replace(word,fullName);
}
}
}
虽然这可以通过更紧凑的内联方式完成,但我认为这更容易理解,更类似于原始代码。