从字符串中间删除特定文本(仅从字符串末尾第一次出现)

Posted

技术标签:

【中文标题】从字符串中间删除特定文本(仅从字符串末尾第一次出现)【英文标题】:remove specific text from middle of string (only first occurrence from end of a string) 【发布时间】:2021-11-18 13:04:19 【问题描述】:

我需要从字符串中间删除一个特定值,并且只从字符串末尾删除它的第一次出现,例如

网址:https://something/ABCD/EFGH/IJKL/**ABCD**?id=1234567910

在上面的 url 字符串中,我需要将最后一个“ABCD”替换为“NEW”,如下所示:

网址:https://something/ABCD/EFGH/IJKL/**NEW**?id=1234567910

目前我的做法是

using System;  
  
namespace StringReplaceSample  
  
   public class Program  
      
        public static void Main(string[] args)  
          
        string pageid = "?id=1234567910";//its something i can retrive or get
        
        string example = "https://something/ABCD/EFGH/IJKL/ABCD?id=1234567910";
        String[] breakApart = example.Split('/');
        var exampleTrimmedlastValue =  breakApart[breakApart.Length-1];
        var exampleReplace = example.Replace(exampleTrimmedlastValue,"NEW");
        var exampleTrimmed = exampleReplace+pageid;
        Console.WriteLine("Original string:" +example);
        Console.WriteLine("Trimmed string:"+exampleTrimmed); 
          
      
 

但我觉得这不是很有效,而且它的巨大有人可以提出任何更简单的方法来做到这一点

【问题讨论】:

为什么不只是.Replace("/ABCD?","/NEW?") 这能回答你的问题吗? Replace the last occurrence of a word in a string - C# 是的,我使用上面创建的链接创建了作为答案发布的解决方案,谢谢 【参考方案1】:

试试这个方法。它会首先找到您需要删除的字符串的位置,如果找到它将删除它。

public static string ReplaceLastOccurrence(string Source, string Find, string Replace)

        int place = Source.LastIndexOf(Find);

        if(place == -1)
           return Source;

        string result = Source.Remove(place, Find.Length).Insert(place, Replace);
        return result;

【讨论】:

【参考方案2】:

假设你要查找和替换的东西总是在斜杠“/”之后和“?id=”之前,那么你可以这样做:

string example = "https://something/ABCD/EFGH/IJKL/ABCD?id=1234567910";

string find = "ABCD";
string replaceWith = "NEW";
string exampleTrimmed = example.Replace("/" + find + "?id=", "/" + replaceWith + "?id=");

Console.WriteLine("Original string: " + example);
Console.WriteLine("Trimmed string: "+ exampleTrimmed); 

【讨论】:

【参考方案3】:

在查看了您的所有建议后,我添加了以下代码以实现我想要的解决方案。

using System;  
  
namespace StringReplaceSample  
  
   public class Program  
      
        public static void Main(string[] args)  
          
        string example = "https://something/ABCD/EFGH/IJKL/ABCD?id=1234567910";
        string replaceValue = "ABCD";
        int lastIndex = example.LastIndexOf(replaceValue, StringComparison.InvariantCulture);
        example = example.Remove(lastIndex, replaceValue.Length).Insert(lastIndex, "NEW");        
        Console.WriteLine("Original string:" +example); 
          
      

【讨论】:

以上是关于从字符串中间删除特定文本(仅从字符串末尾第一次出现)的主要内容,如果未能解决你的问题,请参考以下文章

仅从其中文本的末尾启用编辑 TextField

用于仅从字符串中删除特定特殊字符的正则表达式

如何仅从字符串的开头删除点[重复]

从Excel单元格末尾删除特定字符

使用 bash 删除字符串中特定出现后的所有文本

仅从文本中提取数字