C#从字符串末尾删除字符串

时间:2010-11-04 21:23:26

标签: c# string textbox

我有一个字符串数组:

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

我有一个用户输入文本的文本框。如果他们在文本框中文本末尾的remove数组中键入任何字符串,则应将其删除。最简单的方法是什么?

编辑为了澄清,我正在制作时间解析器。当你给函数一个字符串时,它会尽力将它解析成这种格式:08:14pm我有一个文本框来测试它。当焦点离开文本框时,我需要获取没有am / pm / a / p后缀的文本,因此我可以解析仅数字段。

8 个答案:

答案 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.TryParseDateTime.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);