11

除了第一次出现,如何替换字符串中的字符串?

例如C:\\Test-Processed\1-Processed\2-Processed 应该输出

C:\\Test-Processed\1\2

4

5 回答 5

11

如下所示:

string originalStr = "C:\\Test-Processed\\1-Processed\\2-Processed";
string temp = "-Processed";
string str = originalStr.Substring(0, originalStr.IndexOf(temp) + temp.Length);
originalStr = str + originalStr.Substring(str.Length).Replace(temp, "");

originalStr 将是:

originalStr = "C:\\Test-Processed\\1\\2"
于 2013-04-16T05:52:57.427 回答
5

这里的关键见解是存在一个 indexOf,它在字符串的某个点开始搜索字符串,而不是从头开始。这里:http: //msdn.microsoft.com/en-us/library/7cct0x33.aspx

首先,您要用于查找字符串中.indexOf("-Processed")的第一个索引。-Processed记住这个索引。

现在,使用查找不是第一个.indexOf("-Processed", index+1)的下一个索引。-Processed

重复此操作并Substring(nextindex, "-Processed".Length)删除这些额外的实例,直到您找不到更多实例为止。

于 2013-04-16T05:48:17.197 回答
3

像这样:

String str = @"C:\\Test-Processed\1-Processed\2-Processed";
System.Console.WriteLine(new Regex("(\\d+)-Processed").Replace(str, "$1"));

将产生C:\\Test-Processed\1\2。正则表达式假定您要删除的元素总是以一位或多位数字开头。它将这些数字放在捕获组中,并仅用数字 (1) 替换子字符串(例如 1-Processed)。

编辑:如果假设失败,您可能希望采用@Patashu 建议的方法。

于 2013-04-16T05:48:15.663 回答
2
string ReplaceExceptFirst(string text, string search, string replace)
{
    int pos = text.IndexOf(search);
    if (pos < 0)
    {
        return text;
    }

    int strlen = pos + search.Length;
    return text.Substring(0, strlen) +  (text.Substring(strlen)).Replace(search,replace);
}
于 2013-04-16T06:10:46.653 回答
1

这是上面给出的解决方案之一。(Habib 的解决方案和 Pintu Paul 的参数命名)。我使用了它,但随后将该函数定义为字符串扩展。


public static class StringExtensions
{
    public static string ReplaceAllButFirst(this string originalStr, string search, string replace)
    {
        string str = originalStr.Substring(0, originalStr.IndexOf(search, System.StringComparison.InvariantCultureIgnoreCase) + search.Length);
        return str + originalStr.Substring(str.Length).Replace(search, replace);  
    }
}
于 2016-04-26T22:40:18.430 回答