it-swarm.cn

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

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

63
andrewrk

你可以使用 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
        }
    }
}

有关更多信息,请参阅 Sam Allen关于在c#中拆分字符串的文章 (Performance,Regex)

113
Davy Landman

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

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

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

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

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

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

20
demongolem

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

18
Tim Jarvis

我认为.NET Framework中最接近的是

 string.Split()
3
Steve Morgan

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

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

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

1
adr

类似于Java的方法是:

Regex.Split(string, pattern);

哪里

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

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

0
Musa