This question already has answers here:
Does C# have a String Tokenizer like Java's?
(11个答案)
已关闭6年。
我正在将代码从JAVA移植到C#,并且部分Java代码使用了tokenizer-但据我了解,Java中stringtokenizer产生的数组也将具有分隔符(在这种情况下,+,-,/,* ,(,))作为标记。我试图使用C#Split()函数,但似乎消除了分隔符本身。最后,这将解析一个字符串并将其作为计算运行。我已经做了很多研究,但是没有找到关于该主题的任何引用。
有谁知道如何按照遇到的顺序将实际的分隔符放入拆分数组中?
代币化代码:
测试:
“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
实际上,这说:“在此点上,如果后面跟着
(11个答案)
已关闭6年。
我正在将代码从JAVA移植到C#,并且部分Java代码使用了tokenizer-但据我了解,Java中stringtokenizer产生的数组也将具有分隔符(在这种情况下,+,-,/,* ,(,))作为标记。我试图使用C#Split()函数,但似乎消除了分隔符本身。最后,这将解析一个字符串并将其作为计算运行。我已经做了很多研究,但是没有找到关于该主题的任何引用。
有谁知道如何按照遇到的顺序将实际的分隔符放入拆分数组中?
代币化代码:
public CalcLexer(String s)
{
char[] seps = {'\t','\n','\r','+','-','*','/','(',')'};
tokens = s.Split(seps);
advance();
}
测试:
static void Main(string[] args)
{
CalcLexer myCalc = new CalcLexer("24+3");
Console.ReadLine();
}
“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
最佳答案
您可以将Regex.Split
与零宽度断言一起使用。例如,以下内容将在+-*/
上拆分:
Regex.Split(str, @"(?=[-+*/])|(?<=[-+*/])");
实际上,这说:“在此点上,如果后面跟着
-+*/
,则将其拆分。匹配的字符串本身将为零长度,因此您不会丢失输入字符串的任何部分。关于C# token 生成器-保留分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1134311/
10-17 02:05