2017-02-02 3 views
-1

Я хочу проанализировать файл данных на Java. Файл данных содержит информацию о людях, каждый из которых разделен точкой с запятой «;». В конце каждой строки файла данных у каждого человека есть адрес электронной почты. У каждого человека может быть один или несколько адресов электронной почты. Как я могу проанализировать файл и создать объект «person» с одним или несколькими адресами электронной почты? Я продолжаю получать исключение outofbounds в 4, и я не уверен, почему.Java-анализ файла

это одна строка из файла данных:

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)' is nice решение, которое я бы рекомендовал. –

ответ

1

Ваш Person класс может содержать List<String> поле адреса электронной почты. Также представьте метод addEmail(String), чтобы добавить письмо в этот список.

Затем вы можете просто скомпилировать массив email[] и добавить каждое электронное письмо с помощью метода addEmail.

Person класс может выглядеть следующим образом:

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

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

И тогда вы можете зациклить ваш массив:

Person person = new Person(); 

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

Я продолжаю получать outofbounds excepction –

-1

Вместо того чтобы создать массив адресов электронной почты, а затем назначая их отдельные переменные электронной почты, просто оставьте это как массив. Если вы не знаете, сколько адресов электронной почты будет, зачем пытаться навязать определенный номер?

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; 
     } 
    } 
} 
Смежные вопросы