C#有像Java这样的字符串标记符吗?

时间:2008-09-16 08:38:16

标签: c# string parsing

我正在进行简单的字符串输入解析,我需要一个字符串标记生成器。我是C#的新手但已经编写了Java,C#应该有一个字符串标记器似乎很自然。可以?它在哪里?我该如何使用它?

11 个答案:

答案 0 :(得分:113)

您可以使用String.Split method

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
        }
    }
}

有关详细信息,请参阅Sam Allen's article about splitting strings in c#(效果,正则表达式)

答案 1 :(得分:20)

我只想强调C#的Split方法的强大功能,并进行更详细的比较,特别是来自Java背景的人。

尽管Java中的StringTokenizer只允许单个分隔符,但我们实际上可以拆分多个分隔符,使正则表达式不那么必要(尽管如果需要正则表达式,请务必使用正则表达式!)以此为例:

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

这会分裂三个不同的分隔符,返回一个标记数组。我们还可以删除空数组,其中包含上述示例的第二个参数:

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

Java的String tokenizer确实有一件事我相信C#缺乏(至少Java 7具有此功能)是将分隔符保持为令牌的能力。 C#的Split将丢弃令牌。这在一些NLP应用程序中可能很重要,但对于更通用的应用程序,这可能不是问题。

答案 2 :(得分:18)

字符串的split方法就是您所需要的。事实上,不推荐使用Java中的tokenizer类,而是使用Java的字符串拆分方法。

答案 3 :(得分:3)

我认为.NET Framework中最近的是

string.Split()

答案 4 :(得分:2)

对于复杂的拆分,您可以使用正则表达式创建匹配集合。

答案 5 :(得分:2)

_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()))); 

答案 6 :(得分:1)

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

答案 7 :(得分:0)

读取这个,split函数有一个重载,需要一个由分隔符组成的数组 http://msdn.microsoft.com/en-us/library/system.stringsplitoptions.aspx

答案 8 :(得分:0)

类似于Java的方法是:

Regex.Split(string, pattern);

,其中

  • string - 您需要拆分的文字
  • pattern - 字符串类型模式,什么是拆分文本

答案 9 :(得分:-1)

如果您尝试在.NET控制台应用程序中执行拆分命令行参数之类的操作,那么您将遇到问题,因为.NET已损坏或正在尝试变得聪明(这意味着它与破坏一样好)。我需要能够通过空格字符拆分参数,保留所引用的任何文字,这样它们就不会在中间分裂。这是我写的代码来完成这项工作:

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;
}

答案 10 :(得分:-2)

如果您使用的是C#3.5,您可以为System.String编写一个扩展方法来执行您需要的拆分。然后,您可以使用语法:

string.SplitByMyTokens();

更多信息以及来自MS的有用示例http://msdn.microsoft.com/en-us/library/bb383977.aspx