Разрезать строку на две или более частей в c # - PullRequest
2 голосов
/ 28 апреля 2011

У меня есть такая строка (c #, winforms):

private string source = @"CDM_DEBUG\D1_XS1000psc_1"

Я хочу, чтобы эта строка состояла из двух частей, первая часть должна содержать все до последнего подчеркивания, которое будет 'CDM_DEBUG \ D1_XS1000psc', а вторая часть должна быть '_1'.

Затем я хочу создать новую строку из первой части и сделать ее 'CDM_DEBUG \ D1_XS1000psc_2'

Какой самый быстрый способ сделать это?

Ответы [ 3 ]

8 голосов
/ 28 апреля 2011

Проверьте String.LastIndexOf.

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

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

Это быстрее, чем регулярные выражения?Возможно.Возможно, нет.

2 голосов
/ 28 апреля 2011

Может быть, что-то подобное будет работать?

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;
}
1 голос
/ 28 апреля 2011
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;
}
...