С# удаление строк из конца строки
У меня есть массив строк:
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]);
}
ПРИМЕЧАНИЕ. Этот код можно было бы оптимизировать дальше, но он будет работать с хорошей скоростью.
Ответ 4
На основе вашего редактирования рассмотрите возможность использования встроенного DateTime.TryParse или DateTime.Parse, за которым следует String.Format. Здесь также ссылка на хороший ресурс на форматирование строк.
Ответ 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);