C#Tokenizer - 保留分隔符

Ips*_*ter 5 c# stringtokenizer

我正在努力将代码从JAVA移植到C#,而部分JAVA代码使用了tokenizer - 但我的理解是,Java中stringtokenizer生成的数组也会有分隔符(在这种情况下为+, - ,/,*,(,))作为代币.我试图使用C#Split()函数,但它似乎消除了分隔符本身.最后,这将解析一个字符串并将其作为计算运行.我做了很多研究,但没有找到任何关于这个主题的参考资料.

有谁知道如何让它们遇到的实际分隔符在split数组中?

令牌化代码:

public CalcLexer(String s)
{
    char[] seps = {'\t','\n','\r','+','-','*','/','(',')'};
    tokens = s.Split(seps);
    advance();
}
Run Code Online (Sandbox Code Playgroud)

测试:

static void Main(string[] args)
    {
        CalcLexer myCalc = new CalcLexer("24+3");
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

"24 + 3"将产生以下输出:"24","3"我正在寻找输出"24","+","3"

在完全公开的性质中,该项目是类分配的一部分,并使用以下完整的源代码:

http://www.webber-labs.com/mpl/source%20code/Chapter%20Seventeen/CalcParser.java.txt http://www.webber-labs.com/mpl/source%20code/Chapter%20Seventeen/CalcLexer .java.txt

Pav*_*aev 12

您可以使用Regex.Split零宽度断言.例如,以下内容将拆分为+-*/:

Regex.Split(str, @"(?=[-+*/])|(?<=[-+*/])");
Run Code Online (Sandbox Code Playgroud)

有效地说,"如果它后面或之前是任何一个,则会在这一点上进行分割-+*/.匹配的字符串本身将为零长度,因此您不会丢失输入字符串的任何部分.

  • 现在你有两个问题 (2认同)