String.split の怪

3,669 views
Skip to first unread message

おく

unread,
Oct 1, 2010, 6:15:03 AM10/1/10
to 日本Androidの会
はじめまして、おく と申します。

String.split を使って文字列を分割したい、ただそれだけなんですが、おかしな症状に見舞われまして投稿させていただきました。

String.split で | (パイプ文字) を使って分割したいのですが、この文字だけ挙動が変です。
下のような感じです。

--------
String text = "a,b,c";
String[] buf = text.split(","); // ⇒ 'a' 'b' 'c'

text = "a/b/c";
buf = text.split("/"); // ⇒ 'a' 'b' 'c'

text = "a|b|c";
buf = text.split("|"); // ⇒ 'a' '|' 'b' '|' 'c' ←あれ?
--------

「,」 や 「/」 などは正しく分割してくれるのですが、「|」 だけは分割してくれず、| も含めすべての文字がひとつずつ格納された計6個の要素
を持つ配列が返されてしまいました。

Java とはこういうものなんでしょうか?Android だから?

環境は Xperia SO-01B の実機です。

皆さまの環境ではいかがでしょうか?

--
おく<http://iddy.jp/profile/amay077/

Yoshiori SHOJI

unread,
Oct 1, 2010, 6:34:52 AM10/1/10
to android-g...@googlegroups.com
はじめまして
ヨシオリというものです。

http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/String.html#split(java.lang.String)
こちらですが、引数で受けとるのは正規表現になります。

そして、 | は正規表現のメタ文字なのでエスケープしなくてはいけません。
で、エスケープは \ でするのですが、 Java では文字列のエスケープも \ な為、
これもエスケープしなくてはいけません。

なので答としては
"a|b|c".split("\\|")
になります。


2010/10/1 おく <okuo...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

--
---
Yoshiori SHOJI
mail:yosh...@gmail.com
http://yoshiori.org/
---

おく

unread,
Oct 1, 2010, 12:30:03 PM10/1/10
to 日本Androidの会
ヨシオリさま
回答ありがとうございます。

ホントだ、
Splits this string using the supplied "regular expression" expr.
って書いてありますね。(汗 .NET の Split に比べて高機能ですね。

ありがとうございました。
おかげさまで勉強になりました。

On 10月1日, 午後7:34, Yoshiori SHOJI <yoshi...@gmail.com> wrote:
> はじめまして
> ヨシオリというものです。
>
> http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/String.html#spl...)
> こちらですが、引数で受けとるのは正規表現になります。
>
> そして、 | は正規表現のメタ文字なのでエスケープしなくてはいけません。
> で、エスケープは \ でするのですが、 Java では文字列のエスケープも \ な為、
> これもエスケープしなくてはいけません。
>
> なので答としては
> "a|b|c".split("\\|")
> になります。
>
> 2010/10/1 おく <okuoku...@gmail.com>:
> mail:yoshi...@gmail.comhttp://yoshiori.org/
> ---
Reply all
Reply to author
Forward
0 new messages