替换字符串中的第一个匹配项

本文关键字:第一个 字符串 替换 | 更新日期: 2023-09-27 18:32:30

我有这个字符串:

Hello my name is Marco

我想用<br />替换第一个空格(在 Hellomy 之间(。只有第一个。

在 C#/.NET 3.5 上执行此操作的最佳方法是什么?

替换字符串中的第一个匹配项

 public static class MyExtensions
 {
   public static string ReplaceFirstOccurrance(this string original, string oldValue, string newValue)
    {
     if (String.IsNullOrEmpty(original))
        return String.Empty;
     if (String.IsNullOrEmpty(oldValue))
        return original;
     if (String.IsNullOrEmpty(newValue))
        newValue = String.Empty;
     int loc = original.IndexOf(oldValue);
     return original.Remove(loc, oldValue.Length).Insert(loc, newValue);
    }
}

并像这样使用它:

string str="Hello my name is Marco";  
str.ReplaceFirstOccurrance("Hello", "<br/>");
str.ReplaceFirstOccurrance("my", "<br/>");

无需添加子字符串,下面将仅找到第一个空格实例。从 MSDN:

报告指定的第一个匹配项的从零开始的索引此实例中的字符串。

  string x = "Hello my name is Marco";
  int index = x.IndexOf(" ");
  if (index >= 0)
  {
      x=x.Remove(index,1);
      x = x.Insert(index, @"<br />");
  }

编辑:如果您不确定是否会出现空间,则必须进行一些验证。我已经相应地编辑了答案。

string tmp = "Hello my name is Marco";
int index = tmp.IndexOf(" ");
tmp = tmp.Substring(0, index) + "<br />" + tmp.Substring(index + 1);

在这里,这将起作用:

var s = "Hello my name is Marco";
var firstSpace = s.IndexOf(" ");
var replaced = s.Substring(0,firstSpace) + "<br/>" + s.Substring(firstSpace+1);

你可以把它变成一个扩展方法:

public static string ReplaceFirst(this string input, string find, string replace){
  var first= s.IndexOf(find);
  return s.Substring(0,first) + replace + s.Substring(first+find.Length);
}

然后用法将是

var s = "Hello my name is Marco";
var replaced = s.ReplaceFirst(" ","<br/>");
string[] str = "Hello my name is Marco".Split(' ');
string newstr = str[0] + "<br /> " + string.Join(" ", str.Skip(1).ToArray());

只需使用

Replace("Hello my name is Marco", " ", "<br />", 1, 1)