我有一個這樣的字符串的字符串(C#的WinForms):片在兩個或多個部分在C#
private string source = @"CDM_DEBUG\D1_XS1000psc_1"
我想有這個字符串分爲兩個部分,第一部分應該是之前的最後一切下劃線是'CDM_DEBUG \ D1_XS1000psc',第二部分應該是'_1'。
然後我要讓從第一部分一個新的字符串,使其爲「CDM_DEBUG \ D1_XS1000psc_2」
什麼是這樣做的最快的方法?
我有一個這樣的字符串的字符串(C#的WinForms):片在兩個或多個部分在C#
private string source = @"CDM_DEBUG\D1_XS1000psc_1"
我想有這個字符串分爲兩個部分,第一部分應該是之前的最後一切下劃線是'CDM_DEBUG \ D1_XS1000psc',第二部分應該是'_1'。
然後我要讓從第一部分一個新的字符串,使其爲「CDM_DEBUG \ D1_XS1000psc_2」
什麼是這樣做的最快的方法?
退房String.LastIndexOf
。
int lastUnderscore = source.LastIndexOf('_');
if (lastUnderscore == -1)
{
// error, no underscore
}
string firstPart = source.Substring(0, lastUnderscore);
string secondPart = source.Substring(lastUnderscore);
它比正則表達式快嗎?有可能。可能不是。
也許這樣的事情會工作?
private const char fileNumberSeparator = '_';
private static string IncrementFileName(string fileName)
{
if (fileName == null)
throw new ArgumentNullException("fileName");
fileName = fileName.Trim();
if (fileName.Length == 0)
throw new ArgumentException("No file name was supplied.", "fileName");
int separatorPosition = fileName.LastIndexOf(fileNumberSeparator);
if (separatorPosition == -1)
return AppendFileNumber(fileName, 1);
string prefix = fileName.Substring(0, separatorPosition);
int lastValue;
if (int.TryParse(fileName.Substring(separatorPosition + 1, out lastValue)
return AppendFileNumber(prefix, lastValue + 1);
else
return AppendFileNumber(fileName, 1);
}
private static string AppendFileNumber(string fileNamePrefix, int fileNumber)
{
return fileNamePrefix + fileNumberSeparator + fileNumber;
}
string doc = @"CDM_DEBUG\D1_XS1000psc_1";
var lastPos = doc.LastIndexOf("_");
if(lastPos!=-1){
string firstPart = doc.Substring(0,lastPos);
string secondPart = doc.Substring(lastPos);
var nextnumber = Int32.Parse(secondPart.TrimStart('_'))+1;
var output = firstPart + "_" + nextnumber;
}
@Jeffry感謝漂亮的代碼,但是我的字符串不realated的文件,但你的代碼是有用的後! – 2011-04-27 21:25:41