С# удаление строк из конца строки

У меня есть массив строк:

string[] remove = { "a", "am", "p", "pm" };

И у меня есть текстовое поле, в которое пользователь вводит текст. Если они набирают строку в массиве remove в конце текста в текстовом поле, ее следует удалить. Каков самый простой способ сделать это?

РЕДАКТИРОВАТЬ Чтобы уточнить, я создаю парсер времени. Когда вы даете функции строку, она делает все возможное, чтобы проанализировать ее в этом формате: 08:14pm У меня есть текстовое поле для его проверки. Когда фокус покидает текстовое поле, мне нужно получить текст без суффикса am/pm/a/p, чтобы я мог анализировать сегмент с номером.

Ответ 1

string[] remove = { "a", "am", "p", "pm" };
string inputText = "blalahpm";

foreach (string item in remove)
    if (inputText.EndsWith(item))
    {
        inputText = inputText.Substring(0, inputText.LastIndexOf(item));
        break; //only allow one match at most
    }

Ответ 2

foreach (string suffix in remove)
{
    if (yourString.EndsWith(suffix))
    {
        yourString = yourString.Remove(yourString.Length - suffix.Length);
        break;
    }
}

Ответ 3

Я думаю, что решение BrokenGlass является хорошим, но лично я бы предпочел создать три отдельных метода, позволяющих пользователю обрезать только начало, конец или и то, и другое.

Если эти проблемы будут использоваться много, я бы создал их в вспомогательном классе и/или в качестве методов расширения; http://msdn.microsoft.com/en-gb/library/vstudio/bb383977.aspx

public string TrimStart(string inputText, string value, StringComparison comparisonType = StringComparison.CurrentCultureIgnoreCase)
{
    if (!string.IsNullOrEmpty(value))
    { 
        while (!string.IsNullOrEmpty(inputText) && inputText.StartsWith(value, comparisonType))
        {
            inputText = inputText.Substring(value.Length - 1);
        }
    }

    return inputText;
}

public string TrimEnd(string inputText, string value, StringComparison comparisonType = StringComparison.CurrentCultureIgnoreCase)
{
    if (!string.IsNullOrEmpty(value))
    {
        while (!string.IsNullOrEmpty(inputText) && inputText.EndsWith(value, comparisonType))
        {
            inputText = inputText.Substring(0, (inputText.Length - value.Length));
        }
    }

    return inputText;
}

public string Trim(string inputText, string value, StringComparison comparisonType = StringComparison.CurrentCultureIgnoreCase)
{
    return TrimStart(TrimEnd(inputText, value, comparisonType), value, comparisonType);
}

С помощью этих методов мы можем изменить код для цикла через массив, содержащий строки, подлежащие обрезке.

var content = "08:00 AM";
var removeList = new [] { "a", "am", "p", "pm" };

for (var i = 0; i < removeList.length; i++)
{
    content = TrimEnd(content, removeList[i]);
}

ПРИМЕЧАНИЕ. Этот код можно было бы оптимизировать дальше, но он будет работать с хорошей скоростью.

Ответ 5

var output = (from x in remove
      where input.EndsWith(x)
     select input.Substring(0, input.Length - x.Length)).FirstOrDefault() ?? input;

Ответ 6

Возможно, вы можете использовать DateTime в качестве основного типа.

Используйте DateTime.TryParse, чтобы прочитать время входа пользователя. И используйте DateTime.ToString, чтобы переформатировать время, используя любой формат, который вам нужен.

Ответ 7

Звучит неплохо для регулярного выражения.

using System.Text.RegularExpressions;

public bool IsValidTime(string thetime)
{
  Regex checktime = new Regex(@"^(20|21|22|23|[01]\d|\d)(([:][0-5]\d){1,2})$");

  return checktime.IsMatch(thetime);
} 

Предполагая, что вам нужно время в формате xx: xx

Ответ 8

char[] remove = { 'a', 'p', 'm' };
string s = "8:14pm";

s = s.TrimEnd(remove);