C# Tokenizer - 保留分隔符

标签 c# stringtokenizer

<分区>

我正在将代码从 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# Tokenizer - 保留分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1134311/

相关文章:

java - 从字符串中提取标记

java - 在 Java 中使用字符作为 StringTokenizer 的分隔符

Java StringTokenizer 将每一个字符拆分成一行

java - 如何从 StringTokenizer 获取分隔符?

c# - 使用 IsNullOrEmpty 检查构建 Linq 语句

java - 如何使用 HashMap 为计算器创建内存?

c# - razor View 引擎中的全局函数

c# - 隐藏URL参数的方法

c# - Linq 选择最新的组层次结构

c# - 在此示例 MVVM 应用程序中使用模型是否有意义?