我做的简单的文字输入的分析和我需要一串tokenizer.我是新来C#但已经编写Java,似乎自然的,C#应该有一串tokenizer.不是吗?它在哪里?我怎么使用它?

有帮助吗?

解决方案

你可以用 String.分裂的方法.

class ExampleClass
{
    public ExampleClass()
    {
        string exampleString = "there is a cat";
        // Split string on spaces. This will separate all the words in a string
        string[] words = exampleString.Split(' ');
        foreach (string word in words)
        {
            Console.WriteLine(word);
            // there
            // is
            // a
            // cat
        }
    }
}

更多信息,见 山姆*艾伦的条约分裂串c# (性能,Regex)

其他提示

我只是想强调在权力C#'s分割的方法和给予更详细的比较,特别是从人来自a Java背景。

而StringTokenizer在Java只允许一个单一的符,实际上,我们可以分成多个分隔定期表达的不必要的(虽然如果一个需要regex,使用regex通过各种手段!) 例如采取这样的:

str.Split(new char[] { ' ', '.', '?' })

这种拆分在三个不同的符返回的一系列标记。我们还可以删除空阵列与这将是第二个参数对上述示例:

str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries)

有一件事Java's String tokenizer没有,我相信C#是缺乏(至少Java7具有这种特征)的能力来保持分隔(s)为标记。C#'s Split会抛弃的标记。这可能是重要的是在说一些学的应用,但是更多的一般用途的应用程序,这可能不是一个问题。

分割方法的一串是你需要什么。事实上tokenizer类Java使用有利于Java's string分割的方法。

我认为最近在。净框架

string.Split()

对于复杂的分裂你可以使用一个regex创建一个匹配的收集。

_words = new List<string>(YourText.ToLower().Trim('\n', '\r').Split(' ').
            Select(x => new string(x.Where(Char.IsLetter).ToArray()))); 

_words = new List<string>(YourText.Trim('\n', '\r').Split(' ').
            Select(x => new string(x.Where(Char.IsLetterOrDigit).ToArray()))); 

使用 Regex.Split(string,"#|#");

阅读本,拆分职能具有过采取一系列包括分离器 http://msdn.microsoft.com/en-us/library/system.stringsplitoptions.aspx

类似的Java的方法是:

Regex.Split(string, pattern);

哪里

  • string -你需要来分裂
  • pattern -串的类型模式,什么是分裂的文本

如果你想做些什么样的分裂命令行辩论中的一个。净控制台应用程序,你就要有问题,因为。净是破坏或试图要聪明的(这意味着它是因为好为打破).我需要能够分参数的空间字,并保留任何文字被援引,所以他们没有得到分裂的中间。这是码我写的去做的工作:

private static List<String> Tokenise(string value, char seperator)
{
    List<string> result = new List<string>();
    value = value.Replace("  ", " ").Replace("  ", " ").Trim();
    StringBuilder sb = new StringBuilder();
    bool insideQuote = false;
    foreach(char c in value.ToCharArray())
    {
        if(c == '"')
        {
            insideQuote = !insideQuote;
        }
        if((c == seperator) && !insideQuote)
        {
            if (sb.ToString().Trim().Length > 0)
            {
                result.Add(sb.ToString().Trim());
                sb.Clear();
            }
        }
        else
        {
            sb.Append(c);
        }
    }
    if (sb.ToString().Trim().Length > 0)
    {
        result.Add(sb.ToString().Trim());
    }

    return result;
}

如果您使用的C#3.5你可以写一个扩展的方法系统。串,不分你需要的。然后你可以再使用的语法:

string.SplitByMyTokens();

更多信息和有用的实例从MS在这里 http://msdn.microsoft.com/en-us/library/bb383977.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top