はじめまして、プログラム初心者です。
いつも拝見させていただいおり、とてもためになっております。
タイトルの通りメールアドレスを分割し、First
substringでできると思っていましたが、切り取りの開始位置と修了位置を数字の指定しかできないようで。。。。困っております。
例えばexampleFirst_exampleLast@foo.comといったようなアドレスをFirst
【前提】必ずアンスコとアットマークがついています。
・先頭からアンスコを切り取り変数へ格納。
・アンスコ+1からアットマークまでを切り取り変数へ格納。
というイメージはつかめているのですが、どのメソッドを使えばよいのかわかりません。
よろしく御願いいたします。
コメント

- 2:ryookinawa
- 2008/07/11 15:36
このように書いてみました。。。。
いかがでしょうか?
if

- 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)
);
}

- 4:mmike
- 2008/07/11 16:57
一部訂正します
2つめの
if(mailaddress.indexOf(sep_first_last) != -1){
は if(mailaddress.indexOf(sep_name_dom) != -1){
が正しいです。失意礼いたしました。

- 5:台北猫々
- 2008/07/11 17:41
蛇足ですが、、、
正規表現のグループを使うとこんな感じのこともできますよ(^―^)
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));
}
}
}

- 6:ryookinawa
- 2008/07/14 09:36
mmikeさんコメントありがとうございます。
>また、利用してるJavaのバージョンがあると、
>APIリファレンスのページも紹介しやすいのかと思います。
そうですね!気づきませんでした。次回からはバージョン等の情報も記載したいと思います。
>いかがでしょう?と問われると少し困るのですが^^;
すいません。。。。自信がもてないためについその言葉が出てしまいました。。。。。
>オブジェクト指向への考え方や、
>JavaのバージョンによるJavaAPI内のメソッド選択等
>状況によって、大分変わってくるのかと...
なるほど。はじめたばかりでオブジェクト指向までを踏まえて、まだ組むことは出来ないのですが、今後のために参考にさせていただきます。ちなみにJavaのバージョンは1.5です。
サンプルありがとうございます。LastNameを切り出すときのロジックなど特に参考になりました!mmikeさんが提示いただいた書き方がわかりやすいですね!

- 7:ryookinawa
- 2008/07/14 09:38
台北猫々さんコメントありがとうございます。
>蛇足ですが、、、
>正規表現のグループを使うとこんな感じのこともできますよ(^―^)
正規表現。。。。。実はプログラミングを始めてから知った言葉です。。。。
特に正規表現を扱うJava関数に関してはまったくわからないので、とても勉強になります。
まずは、頂いたサンプルを元にAPIリファレンスと格闘してみたいと思います。
ありがとうございました!!!!

- 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()});
}
}
前へ 1 次へ![]()
コメントする
[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。
[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。






あえて、メソッドのご紹介のみですが。
java.lang.String#indexOf
java.lang.String#substring
同名の関数がありますがロジック内で
使いやすいものを使ってください。
また、利用してるJavaのバージョンがあると、
APIリファレンスのページも紹介しやすいのかと思います。