C#是否具有像Java一样的String Tokenizer?

C#是否具有像Java一样的String Tokenizer?

Does C# have a String Tokenizer like Java's?

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


您可以使用String.Split方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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仅允许使用一个定界符,但实际上我们可以拆分多个定界符,从而使正则表达式的必要性降低(尽管如果需要正则表达式,则一定要使用正则表达式!)例如:

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

这将拆分为三个不同的定界符,并返回令牌数组。对于上面的示例,我们还可以使用第二个参数删除空数组:

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

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


您需要使用字符串的split方法。实际上,不赞成使用Java中的tokenizer类,而推荐使用Java的字符串拆分方法。


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

1
string.Split()

与Java的方法类似:

1
Regex.Split(string, pattern);

哪里

  • string-您需要拆分的文本
  • pattern-字符串类型模式,正在分割文本的内容

1
2
3
4
_words = new List<string>(YourText.ToLower().Trim('\
'
, '\
'
).Split(' ').
            Select(x => new string(x.Where(Char.IsLetter).ToArray())));

要么

1
2
3
4
_words = new List<string>(YourText.Trim('\
'
, '\
'
).Split(' ').
            Select(x => new string(x.Where(Char.IsLetterOrDigit).ToArray())));

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


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


读到此,split函数有一个重载,需要一个由分隔符组成的数组
http://msdn.microsoft.com/zh-CN/library/system.stringsplitoptions.aspx


如果您尝试在.NET Console应用程序中执行诸如拆分命令行参数之类的操作,则会遇到问题,因为.NET已损坏或试图变得更聪明(这意味着它同样出色)。我需要能够通过空格字符来分隔参数,并保留引用的所有文字,以便它们不会在中间被分隔。这是我为完成这项工作而编写的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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,该方法可以进行所需的拆分。然后,您可以使用语法:

1
string.SplitByMyTokens();

更多信息和来自MS的有用示例,请参见http://msdn.microsoft.com/zh-cn/library/bb383977.aspx


推荐阅读

    linux命令行执行成功?

    linux命令行执行成功?,系统,信息,状态,服务,管理,百度,设计,灵活,代码,命令,L

    安卓执行linux命令行?

    安卓执行linux命令行?,系统,设备,基础,发展,标准,情况,信息,电话,号码,工具,

    c执行在linux命令?

    c执行在linux命令?,系统,环境,保险,工具,代码,命令,程序,文件,终端,语言,如何

    linux执行中退出命令?

    linux执行中退出命令?,档案,状态,命令,分析,数据,电脑,实时,系统,工具,编辑,l

    linux授权命令执行?

    linux授权命令执行?,系统,工作,数字,权限,文件,概念,标准,命令,目录,用户,在L

    linux定时执行命令?

    linux定时执行命令?,时间,系统,服务,任务,工作,标准,情况,周期性,工具,命令,l

    如何在linux执行命令?

    如何在linux执行命令?,单位,电脑,命令,系统,基础,发行,工具,工作,信息,文件,m

    linux看命令执行过程?

    linux看命令执行过程?,系统,服务,状态,软件,时间,数据,地址,命令,进程,情况,l

    linux登陆执行命令?

    linux登陆执行命令?,系统,服务,工具,地址,密码,百度,管理,检测,网络,第一,怎

    linux权限命令可执行?

    linux权限命令可执行?,系统,工具,信息,权限,数字,网络,发行,底部,代码,文件,l

    字符串查找命令linux?

    字符串查找命令linux?,系统,字符串,工具,信息,文件,命令,字符,选项,文本,范

    linux远程执行多命令?

    linux远程执行多命令?,工具,服务,命令,状态,暂停,代码,底部,时间,地址,系统,L

    linux下执行命令行?

    linux下执行命令行?,工作,系统,信息,单位,命令,基础,地址,设备,权威,标准,mv

    linux命令行执行工具?

    linux命令行执行工具?,工具,系统,网络,分析,工作,服务,状态,信息,电脑,发行,s

    linux安装执行命令?

    linux安装执行命令?,系统,软件,网络,密码,官方网站,在线,工作,盘中,电脑,第

    linux执行命令超时?

    linux执行命令超时?,时间,代码,系统,名字,环境,工作,服务,下来,名称,地址,如

    linux下执行命令行?

    linux下执行命令行?,工作,系统,信息,单位,命令,基础,地址,设备,权威,标准,mv

    linux远程执行多命令?

    linux远程执行多命令?,工具,服务,命令,状态,暂停,代码,底部,时间,地址,系统,L

    linux命令行执行工具?

    linux命令行执行工具?,工具,系统,网络,分析,工作,服务,状态,信息,电脑,发行,s

    linux执行命令超时?

    linux执行命令超时?,时间,代码,系统,名字,环境,工作,服务,下来,名称,地址,如