一回も披露したことのない豆知識

文字列から指定した文字でデータを区切る関数strtokがC言語にはある

これに相当するC#の関数は何か

例えばCでは以下のように書く。
chardata1[]= " 123 , 456 Yamada " ;
char*token ;
strtok( data, " ," ) ; /* スペースとカンマを区切りに文字列を抽出 */
token = strtok( str, " ." );
printf(" token chat = %s\n", token ) ;
while ( token != NULL ) {
token = strtok( NULL," ." );
if ( token != NULL ) printf(" token chat = %s\n", token ) ;
}

これに相当するc#のSplit関数を使用すると
不要な空白を取り出しているようである
知っている方がおりましたら、教えて下さい。

A 回答 (1件)

strtokの第二引数に同じ値を与え続けるのであれば,StringのSplitメソッドがほぼ同じでしょう。


MSDN: String.Split メソッド (Char[]) (System)
http://msdn.microsoft.com/ja-jp/library/b873y76a …
細かく動作をあわせるなら,
s.Split(' ', ',').Where(v => v != "").ToArray()
のように,空の要素を排除しないといけませんが。

例示のように初回と二回目で異なる値を与えるのであれば,正規表現に頼る事になると思います。
MSDN: Regex クラス (System.Text.RegularExpressions)
http://msdn.microsoft.com/ja-jp/library/system.t …
ただ,例示の場合であればStrnig.IndexOfAnyとString.Substringを使って分割した方が正規表現を考えるより楽だと思います。
MSDN: String.IndexOfAny メソッド (Char[]) (System)
http://msdn.microsoft.com/ja-jp/library/11w09h50 …
MSDN: String.Substring メソッド (System)
http://msdn.microsoft.com/ja-jp/library/system.s …
    • good
    • 0
この回答へのお礼

回答をいただき、ありがおうございます。

C言語でscanfに対応する関数はJAVAとC#では何かということを考えてました。
処理内容は
1.1行分読み込んで
2.区切り文字で分解して
3.変数に変換する
ということになった。

JAVAではStringTokenizerを使えばよいとわかりました。
C#でSplitを使用すると、空行が入ることで、質問したわけです。
空行を除いて文字列を抽出できればと考えたわけです。
Splitの第2パラメタに「StringSplitOptions.RemoveEmptyEntries」を指定すればいいと分かりました。
これで問題解決です。

回答をいただき、ありがおうございました。

お礼日時:2010/03/08 15:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報