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

Ent*_*ity 35 c# string textbox

我有一个字符串数组:

string[] remove = { "a", "am", "p", "pm" };
Run Code Online (Sandbox Code Playgroud)

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

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

Bro*_*ass 70

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
    }
Run Code Online (Sandbox Code Playgroud)

  • 对原始问题的正确答案.不过,我认为,如果用户下午8:14写的,她的意思是20:14.一旦剥离AM/PM指示符,您就无法知道时间是否应解析为12或24小时. (3认同)
  • 如果用户写的是 08:14pm,那么我就这样保留。如果他们输入“814pm”,那么程序将需要去掉 am/pm 部分以仅处理数字部分。在将其放回文本框之前将其添加回来。 (2认同)

Luk*_*keH 18

foreach (string suffix in remove)
{
    if (yourString.EndsWith(suffix))
    {
        yourString = yourString.Remove(yourString.Length - suffix.Length);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这比接受的答案更有效,因为它不必搜索子字符串两次。 (6认同)

Sha*_* Yu 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);
}
Run Code Online (Sandbox Code Playgroud)

使用这些方法,我们可以修改代码以循环包含要修剪的字符串的数组.

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]);
}
Run Code Online (Sandbox Code Playgroud)

注意:此代码可以进一步优化,但可以以良好的速度工作.

  • 我建议使它们扩展(使用`this string inputText`作为第一个参数),并且默认为不区分大小写,因为C#默认为区分大小写. (3认同)