我正在做简单的字符串输入解析,我需要一个字符串标记器。我是C#的新手,但已经编程了Java,C#应该有一个字符串标记器似乎很自然。是吗?它在哪里?我该如何使用它?
您可以使用String.Splite方法。
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关于在C#中拆分字符串的文章(Performance,Regex)
我只想强调C#的Split方法的威力,并进行更详细的比较,特别是来自Java背景的人。
尽管Java中的StringTokenizer只允许使用单个分隔符,但我们实际上可以拆分多个分隔符,从而减少正则表达式的必要性(尽管如果需要regex,请使用regex!)例如:
str.Split(new char[] { , . , ? })
这在三个不同的分隔符上进行拆分,返回一个令牌数组。我们还可以使用上面例子的第二个参数来移除空数组:
str.Split(new char[] { , . , ? }, StringSplitOptions.RemoveEmptyEntries)
Java的字符串标记化器有一点我认为C#所缺乏的(至少Java 7有这个功能),那就是能够将分隔符作为标记保留。C#的拆分将丢弃这些令牌。这在某些NLP应用程序中可能很重要,但对于更通用的应用程序来说,这可能不是问题。
字符串的拆分方法正是您所需要的。事实上,Java中的tokenizer类已被弃用,取而代之的是Java的字符串拆分方法。
我认为在.NET框架中最接近的是
string.Split()
对于复杂的拆分,可以使用正则表达式创建匹配集合。
_words = new List<string>(YourText.ToLower().Trim(
,
).Split( ).
Select(x => new string(x.Where(Char.IsLetter).ToArray())));
或
_words = new List<string>(YourText.Trim(
,
).Split( ).
Select(x => new string(x.Where(Char.IsLetterOrDigit).ToArray())));
与Java的方法类似的是:
Regex.Split(string, pattern);
哪里
string
- the text you need to splitpattern
- string type pattern, what is splitting the text
使用Regex.Split(字符串,“#|#”)代码>
read this, split function has an overload takes an array consist of seperators http://msdn.microsoft.com/en-us/library/system.stringsplitoptions.aspx
如果你试图在.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
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding