题
我做的简单的文字输入的分析和我需要一串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