5

基本上,我想取一个字符串,如果连续有多个'+',我想删除除一个之外的所有。所以:

"This++is+an++++ex+ampl++e"

会成为

"This+is+an+ex+ampl+e"

我不确定 LINQ 或 Regex 或其他东西是否最适合,但它不必使用任何特定的方法。

4

4 回答 4

11
Regex.Replace(str, @"\++", "+");
于 2013-05-13T21:19:22.913 回答
1
while (str.Contains("++"))
    str = str.Replace("++", "+");
于 2019-07-28T09:04:57.057 回答
0

有一些方法可以用更少的代码来做到这一点(@slaks 向我展示了我需要多少重新学习正则表达式),但是在大多数情况下,如果你经常这样做,这应该尽可能快。

public static string RemoveDupes(this string replaceString, char dupeChar){
    if(replaceString == null || String.Length < 2){ return replaceString; }
    int startOfGood = 0;
    StringBuilder result = new StringBuilder();
    for(int x = 0;x<replaceString.Length-1;x++){
        if(replaceString[x] == dupeChar && replaceString[x+1] == dupeChar){
            result.Append(replaceString.SubString(startOfGood,x-startOfGood));//I think this works with length 0
            startOfGood = x+1;
        }
    }
    result.Append(replaceString.Substring(startOfGood,
                   replaceString.Length-startOfGood));
    return result.ToString();
}
//Usage: 
var noDupes = "This++is+an++++ex+ampl++e".RemoveDupes('+');
于 2013-05-13T21:48:17.927 回答
0

Microsoft 的Interactive Extensions (Ix)有一个名为的方法DistinctUntilChanged,可以满足您的需求。该库中包含许多有用的功能 - 但它另一个完整的库,您可能不想打扰。

用法是这样的:

str = new string(str
    .ToEnumerable()
    .DistinctUntilChanged()
    .ToArray());

如果您只想删除加号,那么您可以这样做:

str = new string(str
    .ToEnumerable()
    .Select((c, i) => new { c, i = (c != '+' ? i : -1) })
    .DistinctUntilChanged()
    .Select(t => t.c)
    .ToArray());
于 2013-05-13T22:00:07.200 回答