проверка работы строки и ее замена быстрым методом - PullRequest
0 голосов
/ 14 апреля 2011

У меня есть несколько строк, как показано ниже:

string num1 = "D123_1";
string num2 = "D123_2";
string num3 = "D456_11";
string num4 = "D456_22";
string num5 = "D_123_D";
string num5 = "_D_123";

Я хочу создать функцию, которая будет выполнять следующие действия:

1 - Проверяет, имеет ли данная строка значениеПодчеркните в нем, и это подчеркивание должно быть после некоторых чисел и следовать с некоторыми числами: в этом случае 'num5' и 'num6' недопустимы!

2- Замените числа после последнего подчеркивания любой желаемой строкойНапример, я хочу, чтобы 'num1 = "D123_1"' было изменено на 'D123_2'

Пока я пришел с этой идеей, но она не работает :( Сначала я не знаю, как проверитькритерии 1 и второе оператор замены не работает:

    private string CheckAndReplace(string given, string toAdd)
    {
        var changedString = given.Split('_');
        return changedString[changedString.Length - 1] + toAdd; 
    }

Любая помощь и советы будут оценены

Ответы [ 4 ]

1 голос
/ 14 апреля 2011

В вашем коде вы разбиваете строку на массив строк, а затем получаете доступ к неверному индексу массива, поэтому он не делает то, что вам нужно.

Вместо этого попробуйте работать с подстрокой.Найдите индекс последнего '_' и затем получите подстроку:

    private  string CheckAndReplace(string given, string toAdd) {
        int index = given.LastIndexOf('_')+1;
        return given.Substring(0,index)  + toAdd;
    }

Но перед этим проверьте правильность строки (см. Другие ответы).Этот фрагмент кода сломается, если в строке нет '_'.

1 голос
/ 14 апреля 2011

То, что вы ищете, является регулярным выражением.Это (в основном) с макушки головы.Но это должно легко указать вам правильное направление.Регулярное выражение отлично работает.

public static Regex regex = new Regex("(?<character>[a-zA-Z]+)(?<major>\\d+)_(?<minor>\\d+)",RegexOptions.CultureInvariant | RegexOptions.Compiled);

Match m = regex.Match(InputText);
if (m.Succes)
{
  var newValue = String.Format("{0}{1}_{2}"m.Groups["character"].Value, m.Groups["major"].Value, m.Groups["minor"].Value);
}
1 голос
/ 14 апреля 2011

Вы можете использовать регулярное выражение (это не полная реализация, только подсказка):

private string CheckAndReplace(string given, string toAdd)
{
   Regex regex = new Regex("([A-Z]*[0-9]+_)[0-9]+");

   if (regex.IsMatch(given))
   {
      return string.Concat(regex.Match(given).Groups[1].Value, toAdd);
   }
   else 
   {
      ... do something else
   }
}
0 голосов
/ 14 апреля 2011

Используйте хорошую реализацию регулярного выражения. .NET имеет стандартную реализацию их

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...