2011-04-27 22 views
2

我有一個這樣的字符串的字符串(C#的WinForms):片在兩個或多個部分在C#

private string source = @"CDM_DEBUG\D1_XS1000psc_1" 

我想有這個字符串分爲兩個部分,第一部分應該是之前的最後一切下劃線是'CDM_DEBUG \ D1_XS1000psc',第二部分應該是'_1'。

然後我要讓從第一部分一個新的字符串,使其爲「CDM_DEBUG \ D1_XS1000psc_2」

什麼是這樣做的最快的方法?

回答

8

退房String.LastIndexOf

int lastUnderscore = source.LastIndexOf('_'); 
if (lastUnderscore == -1) 
{ 
    // error, no underscore 
} 

string firstPart = source.Substring(0, lastUnderscore); 
string secondPart = source.Substring(lastUnderscore); 

它比正則表達式快嗎?有可能。可能不是。

2

也許這樣的事情會工作?

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; 
} 
+0

@Jeffry感謝漂亮的代碼,但是我的字符串不realated的文件,但你的代碼是有用的後! – 2011-04-27 21:25:41

1
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; 
} 
相關問題