web-dev-qa-db-ja.com

C#にはJavaのような文字列トークン化機能がありますか?

私は単純な文字列入力の解析を行っていますが、文字列トークナイザーが必要です。私はC#を初めて使用しますが、Javaをプログラムしました。C#に文字列トークナイザーが必要なのは自然なことです。しますか?それはどこにある?どうやって使うの?

65
andrewrk

String.Split method を使用できます。

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#での文字列の分割に関するSam Allenの記事 (パフォーマンス、正規表現)を参照してください。

115
Davy Landman

特に、C#のSplitメソッドのパワーを強調し、特にJavaバックグラウンドから来た人からの詳細な比較を行いたいと思います。

Javaでは単一の区切り文字のみが許可されますが、実際には複数の区切り文字で分割して正規表現の必要性を減らします(正規表現が必要な場合は、必ず正規表現を使用してください!)

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

これは、トークンの配列を返す3つの異なる区切り文字で分割されます。上記の例の2番目のパラメーターを使用して、空の配列を削除することもできます。

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

JavaのString tokenizerには、C#に欠けていると思う(少なくともJava 7にはこの機能があります))ため、区切り文字をトークンとして保持する機能があります。C#のSplitはトークンを破棄しますこれは、一部のNLPアプリケーションでは重要になる可能性がありますが、より一般的な用途のアプリケーションでは問題にならない場合があります。

21
demongolem

文字列の分割方法が必要です。実際、Javaのトークナイザークラスは、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