разделить каждый элемент массива - PullRequest
1 голос
/ 02 августа 2020

У меня проблема.

У меня есть следующая строка ввода:

String text = "John.Davidson/05082004/Belgrade Michael.Barton/01011998/Krakov Ivan.Perkinson/23051986/Moscow";

Я разработал следующий код:

public Person(String warehouse) {
    // Separating people
    String[] peopleArray = warehouse.split(" ");
    
    System.out.println(peopleArray[0]);  //John.Davidson/05082004/Belgrade
    System.out.println(peopleArray[1]);  //Michael.Barton/01011998/Krakov
    System.out.println(peopleArray[2]);  //Ivan.Perkinson/23051986/Moscow
    
    
    
    String[] person1 = peopleArray[0].split("/|\\."); 
    
    System.out.println(person1[0]);  //John

    
    
}

Я хочу разделить каждый элемент peopleArray с < .split("/|\\.") > и помещает каждого человека в новый массив

Точный запрос: в основном классе, после создания объекта Person и заполнения его полей, объект Person должен быть поместить в коллекцию (например, в список) и в конце нужно сделать проход через эту коллекцию и записать данные о людях.

Думаю, это должно выглядеть так:

John, Davidson, 05082004, Belgrad
Michael, Barton, 01011998, Krakov,
Ivan, Perkinson, 23051986, Moscow

Ответы [ 5 ]

1 голос
/ 02 августа 2020

Я думаю, ему нужны массивы, чтобы манипулировать ими в другой момент, а не только строковое представление массива. Что ж, вы можете создать список массивов, а затем получить оттуда нужный массив с данными:

 public static void main(String []args){
          // Separating people
   String warehouse = "John.Davidson/05082004/Belgrade Michael.Barton/01011998/Krakov Ivan.Perkinson/23051986/Moscow";

    List<String[]> nameList = new ArrayList<>();
    String[] peopleArray = warehouse.split(" ");

    for (String s : peopleArray){
          String[] person1 = s.split("/|\\."); 
          nameList.add(person1);
    }
   
   nameList.forEach(x -> {
       System.out.println(x[0]);
       }); //print only names of ALL the people
       
   System.out.println("\ALL info about the first person and so on... :");

    String[] person = nameList.get(0);
    for (String s: person){
        System.out.println(s);
    }
 }

Вывод

John
Michael
Ivan

All info about the first person and so on... :
John
Davidson
05082004
Belgrade
0 голосов
/ 02 августа 2020

Вы можете попробовать Java 8 map, чтобы получить 2D-массив Person как -

String text = "John.Davidson/05082004/Belgrade Michael.Barton/01011998/Krakov Ivan.Perkinson/23051986/Moscow";

String[][] strings = Arrays.stream(text.split(" ")).
                     map(str -> str.split("/|\\.")).toArray(String[][]::new);

System.out.println(Arrays.deepToString(strings));

Вывод -

[[John, Davidson, 05082004, Belgrade], [Michael, Barton, 01011998, Krakov], [Ivan, Perkinson, 23051986, Moscow]]
0 голосов
/ 02 августа 2020

Вы можете l oop через peopleArray и сохранить данные для каждого человека в 2D-массиве

String[] peopleArray = text.split(" ");
String[][] peopleDetailsArray = new String[peopleArray.length][4];
for (int i = 0; i < peopleArray.length; i++) {
  peopleDetailsArray[i] = peopleArray[i].split("/|\\.");
}
System.out.println(Arrays.deepToString(peopleDetailsArray));

Вывод:

[[John, Davidson, 05082004, Belgrade], [Michael, Barton, 01011998, Krakov], [Ivan, Perkinson, 23051986, Moscow]]
0 голосов
/ 02 августа 2020

Попробуйте этот код:

public class Main {
    public static void main(String[] args) {
        
        String text = "John.Davidson/05082004/Belgrade Michael.Barton/01011998/Krakov Ivan.Perkinson/23051986/Moscow";
        
        String[] peopleArray = text.split(" ");
        String[][] personArray = new String[peopleArray.length][4];
        for(int i=0; i<peopleArray.length; i++){
            personArray[i] = peopleArray[i].split("/|\\.");
            for(int j=0; j<personArray[i].length; j++) {
                System.out.print(personArray[i][j] + " ");
            }
            System.out.println(" ");
        }
    }
}

Вывод:

John Davidson 05082004 Belgrade                                                                                                                             
Michael Barton 01011998 Krakov                                                                                                                              
Ivan Perkinson 23051986 Moscow
0 голосов
/ 02 августа 2020

Используйте вместо этого:

String[] person1 = peopleArray[0].split("[\\./]");

Вы можете попробовать использовать какой-нибудь тестер регулярных выражений, например https://regex101.com/. Но не забудьте избежать некоторых символов, например backsla sh для двойного backsla sh

Другое дело: peopleArray [0], peopleArray [1], peopleArray [2] на самом деле могут быть решены с помощью l oop например, для l oop.

...