このコードがある場合:
"......".Split(new String[]{"...", ".."}, StringSplitOptions.None);
結果の配列要素は次のとおりです。
1. ""
2. ""
3. ""
セパレータの順序を逆にすると、
"......".Split(new String[]{"..", "..."}, StringSplitOptions.None);
結果の配列要素は次のとおりです。
1. ""
2. ""
3. ""
4. ""
これら 2 つの例から、Split メソッドは、配列の各要素を左から右に処理するときに、再帰的にトークン化すると結論付けたいと思います。
しかし、英数字を含むセパレーターを方程式に入れると、上記の理論が間違っていることは明らかです。
"5.x.7".Split(new String[]{".x", "x."}, StringSplitOptions.None)
結果:1. "5" 2. ".7"
"5.x.7".Split(new String[]{"x.", ".x"}, StringSplitOptions.None)
結果:1. "5" 2. ".7"
今回は同じ出力が得られます。これは、最初の一連の例に基づいて理論化されたルールが適用されなくなったことを意味します。(つまり、セパレーターの優先順位が常に配列内のセパレーターの位置に基づいて決定される場合、最後の例では & の代わりに & を"5."
取得"7"
し"5"
ます".7"
。
.NET 標準 API の仕組みを推測しようとして時間を無駄にしている理由は、Java アプリに同様の機能を実装したいのですが、StringTokenizer も org.apache.commons.lang.StringUtils も分割する機能を提供していないためです。複数の複数文字の区切り記号を使用する文字列(この機能を提供する API を見つけたとしても、String.Split メソッドで使用されるのと同じアルゴリズムを使用して常にトークン化するかどうかを知ることは困難です。