只删除字符串中的第一个匹配项

本文关键字:第一个 删除 字符串 | 更新日期: 2023-09-27 18:12:10

从字符串中,检查它是否以值"startsWithCorrectId"开头。。。如果它确实从一开始就删除了该值。问题是,如果在字符串中再次找到这个值,它也会将其删除。我意识到这就是.replaced的作用。。。但是有像.startsWith这样的东西可以在启动时删除吗?

string startsWithCorrectId = largeIconID.ToString();
//startsWithCorrectId will be '1'
string fullImageName = file.Replace("_thumb", "");
//fullImageName will be "1red-number-1.jpg"
//file will be '1red-number-1_thumb.jpg'
if(file.StartsWith(startsWithCorrectId))
{
    fullImageName = fullImageName.Replace(startsWithCorrectId, "");
    //so yes this is true but instead of replacing the first instance of '1'..it removes them both
}

我真正想要的是"1red-number-1.jpg"变成"red-number-1-jpg"……而不是"red-nnumber-.jpg"..替换"startsWithCorrectId"的所有实例我只想替换第一个实例

只删除字符串中的第一个匹配项

一个解决方案是使用Regex.Replace((:

fullImageName = Regex.Replace(fullImageName, "^" + startsWithCorrectId, "");

如果startsWithCorrectId位于字符串

的开头,这将删除它
if(file.StartsWith(startsWithCorrectId))
{
    fullImageName = fullImageName.SubString(startsWithCorrectId.Length);    
}

如果我没有正确地理解你的意思,你需要从correctId.Length位置开始获得一个字符串

 if(fullImageName .StartsWith(startsWithCorrectId))
     fullImageName = fullImageName .Substring(startsWithCorrectId.Length);

如果你喜欢扩展:

public static class StringExtensions{
   public static string RemoveFirstOccuranceIfMatches(this string content, string firstOccuranceValue){
        if(content.StartsWith(firstOccuranceValue))
            return content.Substring(firstOccuranceValue.Length);
        return content;
   }
}

//...
fullImageName = fullImageName.RemoveFirstOccuranceIfMatches(startsWithCorrectId);

您可以使用正则表达式来实现这一点,在正则表达式中您可以对字符串从开头开始的要求进行编码:

var regex = "^" + Regex.Escape(startsWithCorrectId);
// Replace the ID at the start. If it doesn't exist, nothing will change in the string.
fullImageName = Regex.Replace(fullImageName, regex, "");

另一种选择是使用子字符串,而不是替换操作。你已经知道它在字符串的开头,你可以把子字符串从它后面开始:

fullImageName = fullImageName.Substring(startsWithCorrectId.Length);