我有一个字符串数组:
string[] remove = { "a", "am", "p", "pm" };
我有一个文本框,用户在其中输入文本。如果他们在文本框中输入remove
数组中的任何字符串,该字符串都应被删除。最简单的方法是什么?
编辑 为了澄清,我正在制作一个时间解析器。当你给函数一个字符串时,它会尽力将其解析成这种格式:08:14pm
。我有一个文本框来测试它。当焦点离开文本框时,我需要获取没有am / pm / a / p后缀的文本,以便只解析数字部分。
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
}
LastIndexOf
调用可以被简单的数学计算替代,因为我们无论如何都会检查item
是否在字符串末尾:inputText = inputText.Substring(0, inputText.Length - input.Length)
。但对我来说,最好的方式是使用C# 8中的索引和范围:inputText = inputText[..^item.Length]
。 - Mariusz Pawelskiforeach (string suffix in remove)
{
if (yourString.EndsWith(suffix))
{
yourString = yourString.Remove(yourString.Length - suffix.Length);
break;
}
}
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]);
}
注意:这段代码可以进一步优化,但是在现状下可以正常工作并且速度不错。
char[] remove = { 'a', 'p', 'm' };
string s = "8:14pm";
s = s.TrimEnd(remove);
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);
}
var output = (from x in remove
where input.EndsWith(x)
select input.Substring(0, input.Length - x.Length)).FirstOrDefault() ?? input;
你可以将 DateTime
作为你的主要类型。
使用 DateTime.TryParse
来读取用户输入的时间。并使用 DateTime.ToString
以任何你需要的格式重新格式化时间。
OnLeave
事件。 - Entity