用C#清除计算器中的最后一个条目

时间:2010-08-14 09:27:39

标签: c#

我有一个字符串;

string str = "3+4*2+8";

此字符串由用户输入.. 我想做一个我只想删除字符串的最后一个条目的操作。即在这个特定的例子中..... 请指导我如何做到这一点....

3 个答案:

答案 0 :(得分:3)

如果您所谈论的只是具有正整数的简单算术表达式,那么您可以使用

Regex.Replace(str, @"([+*/-]|[0-9]+)$", "")

测试:

PS Home:\> '3+4*2+8' -replace '([+*/-]|[0-9]+)$'
3+4*2+
PS Home:\> '3+4*2+' -replace '([+*/-]|[0-9]+)$'
3+4*2
PS Home:\> '1-42' -replace '([+*/-]|[0-9]+)$'
1-

答案 1 :(得分:0)

您始终可以在输入中找到最后一位非数字字符,并从那里删除所有其他字符 所以基本上:

  • 验证输入...
  • 获取最后一位非数字字符索引
  • 返回从该索引中删除任何内容的字符串

这是一个非常简单的例子


public static string TrimLastEntry(string text)
{
     // input is valid ?, check any additional rules of your own....
     if (string.IsNullOrEmpty(text))
     {
          return text;
     }

     // get last index of a non digit char
     int idx = text.Length - 1;
     for (; idx > 0; --idx)
     {
         if (!char.IsDigit(text[idx]))
         {
             break;
         }
     }

     // replace the last 
     return text.Remove(idx + 1);
}

这肯定需要对允许的输入及其结构进行更多验证,但应该给你一个起点

  • 它可能只有我,但我有一个小问题,变量被命名为普通类型名称,智能感知完成令人讨厌:)

答案 2 :(得分:0)

要删除“last”条目,您需要定义最后一个条目。

例如,3*(1+2)

的“最后”条目是什么

2(1+2)还是*(1+2)

您是否会在这些表达式中包含文字:

"Hello" + " " + "world!"

会很容易,但

"This is an expression: " + "1 + \"a\""

使用正则表达式可能会更难处理。

在当天,在XML之前,我们有一个工具可以让您创建词法扫描程序,以便您可以创建语言然后分析或操作它们。查看Flex

与往常一样,维基百科在Lexical Analysis上有很好的条目。

相关问题