dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。

下記のようなStringのデータを配列に格納したいのですが、
private static final String MAILS = "test1@test.com,tes,t2@tes,t.net,test3@te,st.jp";
普通にカンマで分割するとメールアドレスの形式はめちゃくちゃで配列に格納されてしまいます。
StringTokenizer st = new StringTokenizer(MAILS, ",");
String [] mailList = new String[st.countTokens()];
int i = 0;
while (st.hasMoreTokens()) {
mailList[i] = st.nextToken();
i++;
}

test1@test.com
tes,t2@tes,t.net
test3@te,st.jp
上記のようにちゃんとしたメールの形式で配列に格納するにはどうすればいいでしょうか?

ご教授頂ければ幸いです。
よろしくお願いします。

A 回答 (3件)

>もしタイプミスで入力されたら・・・。


>やっぱり技術的に無理でしょうか。。
いくらなんでも無茶です(^^;
タイプミスを前提とするなら、例示されたケースだけでは不足ですよね?
何らかのルール付けができないのであれば「ランダムな文字列をすべてメールアドレスとして正しく解釈する」というのと同じことですので。
間違った入力には「間違ってます」とメッセージを出すべきだと思います。
(例:カンマで分割した後、各要素がメールアドレスの形式になっていなければエラーと表示)

そうできない状況でしょうか?
もう少し開発の背景を知りたいです。
    • good
    • 0

>もしタイプミスで入力されたら・・・。


と言う時や、DoS攻撃等に備えて、処理を行う前にちゃんと入力チェックすることが基本です。(個人で使うものならしなくてもかまいませんが・・・)
メールアドレスやURL等は利用できる文字がRFCで決まっているので比較的簡単にチェックできるはずです。ものによっては正規表現でのチェックも可能です。

間違った入力を受け付け処理してしまうような仕様は危険です。仕様を見直しましょう。
    • good
    • 0
この回答へのお礼

たしかに仕様があまいですね。
上司にいっておきます。(笑)
どうもありがとうございました。

お礼日時:2005/08/01 23:26

Stirng#split()を使って、カンマの条件をjpなどのトップドメイン+カンマに限定すればましにはなると思いますが、想定外のデータが来るとすぐに破綻しますね。


区切り用のカンマと、データとしてのカンマを機械的に区別するには、
CSV等のように特殊文字をエスケープするルールがないと無理です。


以下は補足要求です。
ドメイン名やアカウント名にカンマが入ってるんですか??
使用できないはずですが…
アカウント名に含める場合には「"」で囲むことによって可能だったかもしれません。
ドメイン名はアルファベット、英数字、ハイフンだったと思います。

この回答への補足

>ドメイン名やアカウント名にカンマが入ってるんですか??
たしかに考えにくいことではありますが、
もしタイプミスで入力されたら・・・。
という心配をしています。。

やっぱり技術的に無理でしょうか。。

補足日時:2005/08/01 21:25
    • good
    • 0

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