Как мне взять массив строк и разделить их дальше на объекты? - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть массив строк, определяющих имя питомца, тип животного, возраст и имя их владельца (каждый атрибут отделяется запятой):

String[] petInfo = ["Spot, dog, 2, Joey", "Kip, dog, 3, Jack", "Snuffles, cat, 1, Jane" , "Franklin, turtle, 4, Arthur",...]

Я создал класс питомца со строкой членовpetName, тип строки, int age и строка ownerName.

public class Pet
{
string petName; 
string type;
int age;
string ownerName;

//getters
}

В своем основном я объявил

List<Pet> pets = new ArrayList<Pet>();

Я хочу создать массив объектов питомца, используя arraylist.Я знаю, что должен использовать split для прохождения исходного массива, но это оставляет меня с другим массивом значений, разделенных запятыми, для одного питомца.Как мне написать цикл, который может пройти через массив petInfo и добавить эти значения к каждому объекту pet в моем списке?

Ответы [ 5 ]

0 голосов
/ 11 декабря 2018

Я написал решение.Есть два ключевых момента.Расщепление строки может привести к ошибочным решениям.Вот почему я добавил правильное регулярное выражение.Также вам нужно позаботиться о целочисленном преобразовании.Использование целочисленного класса облегчает вам задачу.

    String[] petInfo = {"Spot, dog, 2, Joey", "Kip, dog, 3, Jack", "Snuffles, cat, 1, Jane" , "Franklin, turtle, 4, Arthur"};
    List<Pet> pets = new ArrayList<Pet>();

    for (int i = 0; i < petInfo.length; i++) {
        String[] pet = petInfo[i].split("\\s*,\\s*");
        pets.add(new Pet(pet[0], pet[1], Integer.parseInt(pet[2]), pet[3]));
    }
0 голосов
/ 11 декабря 2018

Возьмите массив petInfo и пройдитесь по нему с циклом for.Затем вы разбиваете свою строку и создаете новый Pet объект, затем вы можете просто добавить его в List<Pet> с именем pets

List<Pet> pets = new ArrayList<Pet>();

//Renamed it to petInfos, for better usage in the for loop
String[] petInfos = ["Spot, dog, 2, Joey", "Kip, dog, 3, Jack", "Snuffles, cat, 1, Jane" ,
    "Franklin, turtle, 4, Arthur",...]

for(String petInfo : petInfos){
   String[] petInfoSplitted = petInfo.split(", ");

   pets.add(new Pet(petInfoSplitted[0], petInfoSplitted[1],
       Integer.parseInt(petInfoSplitted[2]), petInfoSplitted[3]);
}

Я надеюсь, что мой awnser был полезным.

0 голосов
/ 11 декабря 2018

Вот все, что вам нужно:

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

    public class Main {
        public static void main(String[] args) {
            String[] petInfo = {"Spot, dog, 2, Joey", "Kip, dog, 3, Jack", "Snuffles, cat, 1, Jane" , "Franklin, turtle, 4, Arthur"};
            List<Pet> pets = new ArrayList<Pet>();
            for (String singlePetInfo : petInfo) {
                pets.add(getPetFromString(singlePetInfo));
            }

            pets.forEach(System.out::println);
        }

        private static Pet getPetFromString(String petDescription){
            String[] split = petDescription.split(", ");
            return new Pet(split[0], split[1], Integer.parseInt(split[2]), split[3]);
        }
    }
0 голосов
/ 11 декабря 2018

Вы можете создать конструктор или вспомогательный метод для создания Pet объекта из заданной строки.

Ниже приведен фрагмент кода для конструктора.См. здесь полный рабочий код :

Pet(String val)
{
    String[] vals = val.trim().split(",");
    petName = vals[0].trim();
    type = vals[1].trim();
    age = Integer.valueOf(vals[2].trim());
    ownerName = vals[3].trim();
}

Чтобы использовать его, вы можете сделать что-то вроде следующего:

    String[] petInfo = new String[]{"Spot, dog, 2, Joey", 
        "Kip, dog, 3, Jack", "Snuffles, cat, 1, Jane" , "Franklin, turtle, 4, Arthur"};
    ArrayList<Pet> list = new ArrayList();
    for(String p:petInfo)
    {
        list.add(new Pet(p));
    }
0 голосов
/ 11 декабря 2018

Очень подробный пример: этот метод берет массив и преобразует части питомца в питомца.Возвращение списка домашних животных в конце.

public List<Pet> toPets(String[] petArray) {
  List<Pet> pets = new ArrayList();
  for (String petAsString: petArray) {
     String[] petParts = petAsString.split(",");
     String petName = petParts[0].trim();
     String type = petParts[1].trim();
     int age = Integer.parseInt(petParts[2].trim());
     String ownerName = petParts[3].trim();
     Pet pet = new Pet(petName, type, age, ownerName);
     pets.add(pet);
  }
  return pets;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...