単純な文字列入力の解析を行っていますが、文字列トークナイザーが必要です。私は C# は初めてですが、Java をプログラミングしたことがあります。C# に文字列トークナイザーが必要なのは当然のことです。そうですか?それはどこにある?どうやって使うの?
11 に答える
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
}
}
}
詳細については、C# での文字列の分割に関する Sam Allen の記事(パフォーマンス、正規表現)を参照してください。
C# の Split メソッドの威力を強調し、より詳細な比較を、特に Java のバックグラウンドを持つ人から提供したいと思います。
Java の StringTokenizer は単一の区切り文字のみを許可しますが、実際には複数の区切り文字に分割して、正規表現の必要性を少なくすることができます (ただし、正規表現が必要な場合は、必ず正規表現を使用してください!) 例を次に示します。
str.Split(new char[] { ' ', '.', '?' })
これは、トークンの配列を返す 3 つの異なる区切り文字で分割されます。上記の例の 2 番目のパラメーターとなるものを使用して、空の配列を削除することもできます。
str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries)
Java の String トークナイザーが持っていることの 1 つは、C# に欠けていると私が信じていること (少なくとも Java 7 にはこの機能があります) は、区切り文字をトークンとして保持する機能です。C# の Split はトークンを破棄します。これは、一部の NLP アプリケーションでは重要になる可能性がありますが、より汎用的なアプリケーションでは問題にならない場合があります。
文字列の分割方法が必要です。実際、Java のトークナイザー クラスは、Java の文字列分割メソッドを支持して廃止されました。
.NET Framework で最も近いのは
文字列.Split()
複雑な分割の場合、一致コレクションを作成する正規表現を使用できます。
Javaのメソッドに似ているのは次のとおりです。
Regex.Split(string, pattern);
どこ
string
- 分割する必要があるテキストpattern
- 文字列型パターン、テキストを分割しているもの
_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
C#3.5を使用している場合は、必要な分割を行う拡張メソッドをSystem.Stringに記述できます。その後、構文を使用できます。
string.SplitByMyTokens();
詳細とMSの便利な例はこちらhttp://msdn.microsoft.com/en-us/library/bb383977.aspx