C#有像Java一样的String Tokenizer吗?

我正在做简单的stringinputparsing,我需要一个string标记器。 我是C#的新手,但是已经编写了Java,而C#应该有一个string标记器似乎很自然。 可以? 它在哪里? 我如何使用它?

你可以使用String.Split方法 。

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

欲了解更多信息,请参阅山姆·艾伦的文章关于拆分string在C# (性能,正则expression式)

string的拆分方法是你所需要的。 事实上,Java中的tokenizer类已被弃用,以支持Java的string拆分方法。

我只想强调一下C#的Split方法的function,并给出更详细的比较,特别是来自Java背景的人。

而在Java中的StringTokenizer只允许一个分隔符,我们实际上可以分割多个分隔符,使正则expression式不太必要(虽然如果需要正则expression式,请使用正则expression式!)举例来说:

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

这分成三个不同的分隔符返回一个标记数组。 我们也可以用上面例子中的第二个参数删除空的数组:

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

有一件事Java的string标记器确实有,我相信C#是缺乏(至lessJava 7有这个function)是能够保留分隔符作为标记。 C#的拆分将丢弃令牌。 这对于说NLP应用程序可能很重要,但对于更通用的应用程序来说,这可能不成问题。

我认为最接近的.NET框架是

 string.Split()

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

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

对于复杂的分割,你可以使用正则expression式创build一个匹配集合。

读这个,分裂函数有一个重载需要一个数组包含分隔符http://msdn.microsoft.com/en-us/library/system.stringsplitoptions.aspx

类似于Java的方法是:

 Regex.Split(string, pattern); 

哪里

  • string – 你需要分割的文本
  • pattern – stringtypes模式,什么是分裂文本

如果你正在尝试在.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; } 

如果你正在使用C#3.5,你可以写一个扩展方法到System.String来完成你需要的拆分。 然后你可以使用语法:

 string.SplitByMyTokens(); 

更多信息和来自MS这里的一个有用的例子http://msdn.microsoft.com/en-us/library/bb383977.aspx