- - PR -
splitメソッド
1
投稿者 | 投稿内容 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-04 16:31
お世話になります。
Javaのプログラミングの勉強をしています。 splitメソッドを使用して、文字列を分けようとしています。 String test = "0:1:2=aaa/bbb/ccc" String[] separate = test.split("="); とすると、separateの長さは2となります。 しかし、'='を'|'に変えて String test = "0:1:2|aaa/bbb/ccc" String[] separate = test.split("|"); とすると、separateの長さは17となります。 なぜでしょうか? | ||||||||||||||||||||||||
|
投稿日時: 2006-08-04 16:44
半角の|なのか全角の|なのかどっちなのか分かりませんが、全角半角どっちでも2になりましたよ。半角の|はメタキャラクタだからエスケープしましたけど。
# 確認したJavaのバージョンは1.4.2_10 | ||||||||||||||||||||||||
|
投稿日時: 2006-08-04 16:46
正規表現を要求してるのにメタキャラだけ渡してるからでは?
| ||||||||||||||||||||||||
|
投稿日時: 2006-08-04 16:48
Stringのsplitメソッドには正規表現のパターンを指定するんですが、
半角の'|'は、正規表現では”(A|B)”というような使い方をする特殊 な意味を持つ文字です。エスケープ文字を付けて"\\|"と指定すると配 列の長さは2になってくれますよ。 詳しくはJavaDOCのPatternあたりのドキュメントを見ていただくと載 ってます。 '|'と指定すると、どんな文字でも対照になるから17(18?)という結果 になったんではないですかね。 | ||||||||||||||||||||||||
|
投稿日時: 2006-08-04 16:57
以下j2sdk1.4.2_08にて確認しています。
|は半角ですね
を実行すると
と言う結果が得られました。 何故2にならないのか、という問いかと思います。 これはString#splitの引数が単なる文字列ではなく 正規表現であるために起こります。 半角の|は正規表現の演算子のひとつとなっており その意味はORです。 区切り文字が|であるとはつまり 何もないものor何もないものを区切り文字とする という意味になってしまいます。 結果
は
という結果を返すことになります。 もしも半角の|で区切りたいのであれば|をエスケープしてやる必要があります。
こうすることで結果
を得ることが出来ます。 [ メッセージ編集済み 編集者: あすか 編集日時 2006-08-04 17:00 ] | ||||||||||||||||||||||||
|
投稿日時: 2006-08-04 17:07
それだとコンパイルエラー起こしちゃいますよ。¥|ではなく¥¥|にしないといけません。 ソースファイル上 ¥¥| コンパイル中の文字エスケープ処理 ¥| パターン文字列のエスケープ処理 |(メタキャラではなく文字として) # ¥は半角にしてください [ メッセージ編集済み 編集者: 想馬 編集日時 2006-08-04 17:11 ] | ||||||||||||||||||||||||
|
投稿日時: 2006-08-04 17:20
ありがとうございました!!
メタキャラというキーワードを元に勉強させていただきました。 まだまだ勉強不足ですね。 アドバイスありがとうございます! |
1