只删除字符串中的第一个匹配项
本文关键字:第一个 删除 字符串 | 更新日期: 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);