我有一个字符串数组:
string[] remove = { "a", "am", "p", "pm" };
我有一个用户输入文本的文本框。如果他们在文本框中文本末尾的remove
数组中键入任何字符串,则应将其删除。最简单的方法是什么?
编辑为了澄清,我正在制作时间解析器。当你给函数一个字符串时,它会尽力将它解析成这种格式:08:14pm
我有一个文本框来测试它。当焦点离开文本框时,我需要获取没有am / pm / a / p后缀的文本,因此我可以解析仅数字段。
答案 0 :(得分:68)
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
}
答案 1 :(得分:14)
foreach (string suffix in remove)
{
if (yourString.EndsWith(suffix))
{
yourString = yourString.Remove(yourString.Length - suffix.Length);
break;
}
}
答案 2 :(得分:7)
我认为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]);
}
注意:此代码可以进一步优化,但会以良好的速度运行。
答案 3 :(得分:4)
根据您的修改,请考虑使用内置的DateTime.TryParse或DateTime.Parse方法,后跟String.Format。这里也是good resource on formatting strings的链接。
答案 4 :(得分:1)
听起来像正则表达式的好地方。
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
答案 5 :(得分:1)
var output = (from x in remove
where input.EndsWith(x)
select input.Substring(0, input.Length - x.Length)).FirstOrDefault() ?? input;
答案 6 :(得分:1)
您可以使用DateTime
作为主要类型。
使用DateTime.TryParse
来读取用户输入的时间。并使用DateTime.ToString
使用您需要的任何格式重新格式化时间。
答案 7 :(得分:0)
char[] remove = { 'a', 'p', 'm' };
string s = "8:14pm";
s = s.TrimEnd(remove);