Javaでメールアドレスを分割する
ryookinawa
ryookinawa
ATOMRSS
  • コード求むID: 298
  • 登録日時:  2008/07/11 15:03
  • 最終更新日時: 2008/07/14 23:59
  • アクセス数: 717
  • タグ:  java mail
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加

はじめまして、プログラム初心者です。
いつも拝見させていただいおり、とてもためになっております。

タイトルの通りメールアドレスを分割し、First NameとLast Nameに分割する処理を考えています。
substringでできると思っていましたが、切り取りの開始位置と修了位置を数字の指定しかできないようで。。。。困っております。


例えばexampleFirst_exampleLast@foo.comといったようなアドレスをFirst NameとLast Nameに分割したい場合はどのように書けばいいのでしょうか?
【前提】必ずアンスコとアットマークがついています。

・先頭からアンスコを切り取り変数へ格納。
・アンスコ+1からアットマークまでを切り取り変数へ格納。


というイメージはつかめているのですが、どのメソッドを使えばよいのかわかりません。

よろしく御願いいたします。


コメント

  • mmike
  • 1:mmike
  • 2008/07/11 15:33

あえて、メソッドのご紹介のみですが。

java.lang.String#indexOf
java.lang.String#substring

同名の関数がありますがロジック内で
使いやすいものを使ってください。

また、利用してるJavaのバージョンがあると、
APIリファレンスのページも紹介しやすいのかと思います。

  • GoodJob
  • 0

このように書いてみました。。。。
いかがでしょうか?


   String address= "exampleFirst_exampleLast@foo.com";
   String firstName null;
   String lastName null;

   int pos address.indexOf("_");
   if (pos != -1){
      firstName address.substring(0 pos);
      String address0 address.substring(pos 1);
      int pos2 address0.indexOf("@");
   if (pos2 != -1) {
        lastName address0.substring(0 pos2);
      }
   }

  • GoodJob
  • 0

  • mmike
  • 3:mmike
  • 2008/07/11 16:54

いかがでしょう?と問われると少し困るのですが^^;

私ならこう組みますというのを書くのであれば
単発で一時しか使わないのであれば以下のように組みます。
が、オブジェクト指向への考え方や、
JavaのバージョンによるJavaAPI内のメソッド選択等
状況によって、大分変わってくるのかと...

    char sep_first_last = '_';
    char sep_name_dom = '@';

    String mailaddress = "first_last@domain.com";
    String first = "";
    String last = "";

    if(mailaddress.indexOf(sep_first_last) != -1){
      first = mailaddress.substring(
            0
            , mailaddress.indexOf(sep_first_last)
          );
    }

    if(mailaddress.indexOf(sep_first_last) != -1){
      last = mailaddress.substring(
          mailaddress.indexOf(sep_first_last) + 1
          , mailaddress.indexOf(sep_name_dom)
        );
    }

  • GoodJob
  • 0

  • mmike
  • 4:mmike
  • 2008/07/11 16:57

一部訂正します
2つめの

  if(mailaddress.indexOf(sep_first_last) != -1){

  if(mailaddress.indexOf(sep_name_dom) != -1){
が正しいです。
失意礼いたしました。

  • GoodJob
  • 0

蛇足ですが、、、
正規表現のグループを使うとこんな感じのこともできますよ(^―^)

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class tmp2 {
    
    public static void main(String[] args) {
        
        //正規表現で、Firstをグループ1に、Lastをグループ2にします。
        Pattern pattern = Pattern.compile("^([^_]*)_([^_]*)@.*$");
        Matcher matcher = pattern.matcher("exampleFirst_exampleLast@foo.com");
        
        //走査します。
        if(matcher.find()) {
            System.out.println("Firstは" + matcher.group(1));
            System.out.println("Lastは" + matcher.group(2));
        }
    }
}

  • GoodJob
  • 0

mmikeさんコメントありがとうございます。

>また、利用してるJavaのバージョンがあると、
>APIリファレンスのページも紹介しやすいのかと思います。

そうですね!気づきませんでした。次回からはバージョン等の情報も記載したいと思います。

>いかがでしょう?と問われると少し困るのですが^^;

すいません。。。。自信がもてないためについその言葉が出てしまいました。。。。。

>オブジェクト指向への考え方や、
>JavaのバージョンによるJavaAPI内のメソッド選択等
>状況によって、大分変わってくるのかと...

なるほど。はじめたばかりでオブジェクト指向までを踏まえて、まだ組むことは出来ないのですが、今後のために参考にさせていただきます。ちなみにJavaのバージョンは1.5です。


サンプルありがとうございます。LastNameを切り出すときのロジックなど特に参考になりました!mmikeさんが提示いただいた書き方がわかりやすいですね!

  • GoodJob
  • 0

台北猫々さんコメントありがとうございます。

>蛇足ですが、、、
>正規表現のグループを使うとこんな感じのこともできますよ(^―^)

正規表現。。。。。実はプログラミングを始めてから知った言葉です。。。。
特に正規表現を扱うJava関数に関してはまったくわからないので、とても勉強になります。
まずは、頂いたサンプルを元にAPIリファレンスと格闘してみたいと思います。

ありがとうございました!!!!

  • GoodJob
  • 0

  • mmike
  • 8:mmike
  • 2008/07/14 23:59

色々がんばって試してみてください。

余談ですが、、、
自分のプログラムにもう1つ間違いを見つけました...
訂正を入れた箇所ですが

if(mailaddress.indexOf(sep_name_dom) != -1){
はロジックとして間違いで、
if(mailaddress.indexOf(sep_name_dom) != -1
&& mailaddress.indexOf(sep_first_last) != -1){
としないと、mailaddressの中身によってはエラーが出てしまいますね...
度々失礼いたしましたm(__)m

なので、もう1つプレゼント的に組んでみました。
Object指向をガリガリに意識したものです。
※最後のmainメソッドはデバッグ用なので、削除されて構いません。
public class MailName {

  public static final String BLANK = "";
  public static final String SEP_FIRST_LAST = "_";
  public static final String SEP_NAME_DOM = "@";

  private String mailAddress;

  public String getFirstName(){
    if(isNotEmpty(this.mailAddress)){
      if(this.mailAddress.indexOf(SEP_FIRST_LAST) != -1){
        //返却値
        return this.mailAddress.substring(
              0
              ,this.mailAddress.indexOf(SEP_FIRST_LAST)
            );
      }
    }
    return BLANK;
  }

  public String getLastName(){
    if(isNotEmpty(this.mailAddress)){
      if(this.mailAddress.indexOf(SEP_FIRST_LAST) != -1
          && this.mailAddress.indexOf(SEP_FIRST_LAST) != -1){
        //返却値
        return this.mailAddress.substring(
              this.mailAddress.indexOf(SEP_FIRST_LAST) + 1
              ,this.mailAddress.indexOf(SEP_NAME_DOM)
            );
      }
    }
    return BLANK;
  }

  public String getMailAddress() {
    return this.mailAddress;
  }

  public void setMailAddress(String mailAddress) {
    this.mailAddress = mailAddress;
  }

  public static boolean isNotEmpty(String str){
    if(str != null && str.length() != 0){
      return true;
    }
    return false;
  }

  public static void main(String args[]){
    MailName mn = new MailName();
    mn.setMailAddress("first_last@domain.com");
    System.out.printf("first:%s - last:%s",new String[]{mn.getFirstName(),mn.getLastName()});
  }
}

  • GoodJob
  • 0

前へ 1 次へ

コメントする

[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。

[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

関連ソースコード・ノウハウを登録

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ブックマークコメント