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

时间:2012-04-27 12:34:22

标签: c# .net replace

我有这个字符串:

Hello my name is Marco

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

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

6 个答案:

答案 0 :(得分:11)

 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/>");

答案 1 :(得分:6)

无需添加子字符串,以下将仅查找第一个空格实例。 来自MSDN

  

报告指定的第一次出现的从零开始的索引   在这个例子中的字符串。

  string x = "Hello my name is Marco";
  int index = x.IndexOf(" ");
  x= index >=0 ? x.Insert(index, @"<br />") : x;

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

答案 2 :(得分:3)

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

答案 3 :(得分: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/>");

答案 4 :(得分:0)

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

答案 5 :(得分:0)

只需使用

 Dim result As Double
    Dim oCmm As New Oracle.DataAccess.Client.OracleCommand("GetPhaDrugFranshiz")
    oCmm.Parameters.Add(cls_General.Create_Ora_Param("RET_VAL", ParameterDirection.ReturnValue, OracleDbType.Double))
    oCmm.Parameters.Add(cls_General.Create_Ora_Param("v_patientid", ParameterDirection.Input, OracleDbType.Decimal, v_patientid.Length, v_patientid))
    oCmm.Parameters.Add(cls_General.Create_Ora_Param("v_usercat", ParameterDirection.Input, OracleDbType.Char, v_usercat.Length, v_usercat))
    oCmm.Parameters.Add(cls_General.Create_Ora_Param("v_cust_no", ParameterDirection.Input, OracleDbType.Char, v_cust_no.Length, v_cust_no))
    oCmm.Parameters.Add(cls_General.Create_Ora_Param("v_dblinks_id", ParameterDirection.Input, OracleDbType.Decimal, v_dblinks_id.Length, v_dblinks_id))
    oCmm.Parameters.Add(cls_General.Create_Ora_Param("v_cust_service_type", ParameterDirection.Input, OracleDbType.Char, cust_service_type.Length, cust_service_type))
    oCmm.Parameters.Add(cls_General.Create_Ora_Param("v_drug_code", ParameterDirection.Input, OracleDbType.Char, 5, drugCode))
    With oCmm
        .CommandType = CommandType.StoredProcedure
        .CommandTimeout = 90
        .Connection = pCnn
        .Transaction = Tran
        .ExecuteNonQuery()
            result = Double.Parse(.Parameters.Item("RET_VAL").Value.ToString)
    End With
    Return result