несовместимый тип двойного массива и строки свойств.split()

#java #compiler-errors

#java #ошибки компилятора

Вопрос:

 public static void main(String[] args)
{
    String input="jack=susan,kathy,bryan;david=stephen,jack;murphy=bruce,simon,mary";
    String[][] family = new String[50][50];

    //assign family and children to data by ;
    StringTokenizer p = new StringTokenizer (input,";");
    int no_of_family = input.replaceAll("[^;]","").length();
    no_of_family  ;
    System.out.println("family= " no_of_family);
    String[] data = new String[no_of_family];
    int i=0;
    while(p.hasMoreTokens())
    {
        data[i] = p.nextToken();
        i  ;
    }

    for (int j=0;j<no_of_family;j  )
    {
        family[j][0] = data[j].split("=")[0];
                    //assign child to data by commas
        StringTokenizer v = new StringTokenizer (data[j],",");
        int no_of_child = data[j].replaceAll("[^,]","").length();
        no_of_child  ;

        System.out.println("data from input = " data[j]);
        for (int k=1;k<=no_of_child;k  )
        {

            family[j][k]= data[j].split("=")[1].split(",");
            System.out.println(family[j][k]);
        }

    }

}
  

у меня есть список семейства во входной строке, и я разделяю его на семейство, и я хочу сделать это в семействе двойного массива [i] [j].

моя цель:

 family[0][0]=1st father's name
family[0][1]=1st child name
family[0][2]=2nd child name and so on...

family[0][0]=jack
family[0][1]=susan
family[0][2]=kathy
family[0][3]=bryan
family[1][0]=david
family[1][1]=stephen
family[1][2]=jack
family[2][0]=murphy
family[2][1]=bruce
family[2][2]=simon
family[2][3]=mary
  

но я получил сообщение об ошибке в виде заголовка: в совместимых типах
найдено:java.lang.Строка[]
требуется:java.lang.Строка
семейство[j][k]= data[j].split(«=»)[1].split(«,»);

что я могу сделать?мне нужна помощь

никто не знает, как использовать StringTokenizer для этого ввода?

Ответ №1:

Пытаюсь понять, почему вы не можете просто использовать split для вашей вложенной операции.

Например, что-то вроде этого должно работать просто отлично

 for (int j=0;j<no_of_family;j  )
{
    String[] familySplit = data[j].split("=");

    family[j][0] = familySplit[0];

    String[] childrenSplit = familySplit[1].split(",");
    for (int k=0;k<childrenSplit.length;k  )
    {

        family[j][k 1]= childrenSplit[k];
    }

}
  

Ответ №2:

Вы пытаетесь присвоить массив строк строке. Может быть, это сделает это более понятным?

 String[] array = data.split("=")[1].split(",");
  

Теперь, если вам нужен первый элемент этого массива, вы можете выполнить:

 family[j][k] = array[0];
  

Комментарии:

1. он очистит с ошибкой, но данные, которые у меня будут, всегда будут первыми данными, и когда я ввожу family [j] [k]=array [k], я получаю это сообщение: исключение в потоке. Исключение ArrayIndexOutOfBoundsException…

2. Итак … вам нужно убедиться, что вы обращаетесь к массиву в пределах его границ. В вашем коде вы принимаете значение индекса 1 для вашего первого разделения, и я принял значение индекса 0 в моем примере.

Ответ №3:

Я всегда избегаю использовать массивы напрямую. Ими трудно манипулировать по сравнению с динамическим списком. Я реализовал решение, используя сопоставление родительского элемента со списком дочерних элементов Map<String, List<String>> (для чтения Map<Parent, List<Children>> ).

 public static void main(String[] args) {
        String input = "jack=susan,kathy,bryan;david=stephen,jack;murphy=bruce,simon,mary";

        Map<String, List<String>> parents = new Hashtable<String, List<String>>();
        for ( String family : input.split(";")) {
            final String parent = family.split("=")[0];
            final String allChildrens = family.split("=")[1];

            List<String> childrens = new Vector<String>();
            for (String children : allChildrens.split(",")) {
                childrens.add(children);
            }
            parents.put(parent, childrens);
        }

        System.out.println(parents);
    }
  

Результат такой:

 {jack=[susan, kathy, bryan], murphy=[bruce, simon, mary], david=[stephen, jack]}
  

С помощью этого метода вы можете получить доступ к родительскому каталогу с помощью карты:

 System.out.println(parents.get("jack"));
  

и этот вывод:

 [susan, kathy, bryan]