比如说我有以下字符串:
var testString =“Hello,world”;
我想调用以下方法:
var newString = testString.Replace(“Hello”,“”)。Replace(“world”,“”);
是否有一些代码构造简化了这一点,因此我只需要指定一次Replace方法,并且可以指定一堆参数一次传递给它?
答案 0 :(得分:5)
使这个更具可读性的另一个选择是添加新行和适当的缩进(这对我来说是更好的选择):
var newString = testString.Replace("Hello", "")
.Replace("world", "")
.Replace("and", "")
.Replace("something", "")
.Replace("else","");
答案 1 :(得分:3)
创建一个您传递String
和Dictionary(String, String)
的函数。迭代字典中的每个项目InputString.Replace(DictionaryEntry.Key, DictionaryEntry.Value)
。返回带有替换值的字符串。
但如果它只有2次,我就会.Replace.Replace
...
答案 2 :(得分:3)
在某些语言(例如python)中,有一个reduce或fold函数的概念 - 这是一种在列表中所有元素上表示循环的函数方法。
使用reduce你可以写这样的东西
return reduce(lambda a, x: a.Replace(x, ''), ['hello', 'world'], initial)
与
相同a = initial for x in ['hello', 'world']: a = a.Replace(x, '') return a
在python中你也可以发音为
reduce(str.replace, ['hello', 'world'], initial).
当然这是否更简单完全是另一个问题 - 但很多人当然喜欢编写这样的代码。
答案 3 :(得分:2)
如其他帖子所述,有很多方法。
但通常甜=高效(=可维护)=简单。最好不要尝试,除非有一些理由超出你描述问题的背景。
答案 4 :(得分:1)
你提出的任何构造都可能比你原来的帖子更复杂。如果要传递许多不同的参数,可以构造这些参数的向量并迭代它执行调用。但话说回来,对于您当前的示例,修改后的版本会更长,编写起来更复杂。两次重复率太小了。
答案 5 :(得分:1)
您可以创建自己的替换扩展方法,该方法采用IEnumberable参数。然后遍历迭代器并使用replace方法。
然后你就可以这样称呼它.Replace(new string [] {“Matt”,“Joanne”,“Robert”},“”)
我认为应该这样做
public static string Replace(this string s, IEnumerable<string> strings, string replacementstring)
{
foreach (var s1 in strings)
{
s = s.Replace(s1, replacementstring);
}
return s;
}
答案 6 :(得分:1)
您可以使用正则表达式执行此操作,例如:
var newString = Regex.Replace(testString, "Hello|world", "");
如果你想从一个序列中以编程方式构建正则表达式,它将是这样的:
var stringsToReplace = new[] { "Hello", "world" };
var regexParts = stringsToReplace.Select(Regex.Escape);
var regexText = string.Join("|", regexParts.ToArray());
答案 7 :(得分:0)
我不知道这是否更甜,但你可以这样做:
string inputString = "Hello, world";
string newString = new[] { "Hello", "world" }.Aggregate(inputString, (result, replace) => result.Replace(replace, ""));
这将以输入字符串作为种子开始,并使用每个替换字符串运行函数。
理解聚合函数的一个更好的例子可能是:
List<Payment> payments = ...;
double newDebt = payments.Aggregate(oldDebt, (debt, payment) => debt - payment.Amount);
答案 8 :(得分:0)
很多人都说你应该使用IEnumerable和List and Arrays等,虽然这完全“好”但我宁愿在C#中使用params关键字,如果我是你的话。如果我要实现这样的东西 - 我可能不会因为你的双重替换方法调用那样容易做些事情......
答案 9 :(得分:0)
我看到这些模式有几个缺陷 - 首先,字符串是不可变的调用替换几次或循环可能是坏的,特别是如果你的输入字符串很大。如果您一心想调用replace,那么至少在StringBuilder类中使用Replace方法。