2017-02-02 10 views
-1

Javaでデータファイルを解析したいと思っています。データファイルには、それぞれについての情報がセミコロン「;」で区切られています。データファイルの各行の最後には、各人が電子メールアドレスを持っています。各ユーザーは1つ以上の電子メールアドレスを持つことができます。ファイルを解析し、1つ以上の電子メールアドレスを持つ「人物」オブジェクトを作成するにはどうすればよいですか?私は4でoutofboundsの例外を取得し続けていると私はなぜか分からない。Javaでファイルを解析する

これは、データファイルから1行です。これまでの

306a;;Sampson, Brock;123 N 1st Street,Omaha,NE,68116,USA;[email protected],[email protected] 

HERESに私のコード:

if(tokens[4].contains(",")){ 
       String emails[] = tokens[4].split(","); 
       for(String email : emails) { 
        person.addEmail(email); 
        person.setEmail(email); 
       }   
      } 
      else{ 
       String email = tokens[4]; 
       person.addEmail(email); 
      } 
      System.out.println(person.getEmail()); 




    }  
    s.close(); 
+0

あなたがリストまたはArrayListのようなものを使用することを許可されていますか?最終的にあなたは電子メールアドレスを入れる無制限のリストを持っていたいと思っています。 – stdunbar

+0

とても素敵でシンプルな宿題のようです –

+1

'String [] emails = Arrays.copyRange(tokens、5、tokens.length - 1)' nice解決策をお勧めします。 –

答えて

1

あなたPersonクラスはメールアドレスをList<String>フィールドが含まれていてもよいです。また、リストに電子メールを追加する方法はaddEmail(String)です。

次に、email[]配列をループし、各電子メールをaddEmailメソッドで追加できます。代わりに、電子メールアドレスの配列を作成し、その後にそれらを割り当てるので

Person person = new Person(); 

String emails[] = tokens[5].split(","); 
for(String email : emails) { 
    person.addEmail(email); 
} 
+0

私はoutofbounds excepctionを得ています –

-1

public class Person { 
    private List<String> emails = new ArrayList<>(); 

    public void addEmail(String email) { 
     emails.add(email); 
    } 
} 

そして、あなたができるループあなたの配列:

Personクラスは次のようになります。電子メール変数を分けて、配列として残してください。いくつの電子メールアドレスがあるのか​​分からない場合、なぜ特定の番号を強制しようとしますか?

0

実施例(Javaの8)の下に見つけてください:

package be.duo.test; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class Parser { 

    public static void main(String[] args) { 
     String line = "306a;;Sampson, Brock;123 N 1st Street,Omaha,NE,68116,USA;[email protected],[email protected]"; 

     Parser parser = new Parser(); 
     Person person = parser.parsePerson(line); 

     System.out.println("The emails are:"); 
     person.getEmails().forEach(System.out::println); 
    } 

    private Person parsePerson(String line) { 
     final Person person = new Person(); 

     String[] tokens = line.split(";"); 

     String [] emails = tokens[4].split(","); 
     Arrays.stream(emails).forEach(person::addEmail); 

     return person; 
    } 

    class Person { 

     private List<String> emails = new ArrayList<>(); 

     public void addEmail(String email) { 
      emails.add(email); 
     } 

     public List<String> getEmails() { 
      return emails; 
     } 
    } 
}