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)
有效地说,"如果它后面或之前是任何一个,则会在这一点上进行分割-+*/.匹配的字符串本身将为零长度,因此您不会丢失输入字符串的任何部分.
| 归档时间: |
|
| 查看次数: |
16046 次 |
| 最近记录: |