Java 将文档中出现在单词后面的字符串存储到数组中并组合它们

Java 将文档中出现在单词后面的字符串存储到数组中并组合它们,java,arrays,parsing,text-files,Java,Arrays,Parsing,Text Files,我有一个文件,其中包括以下数据行: group = A_1 group_sub = A101,A102,A103,A104 group = A_2 group_sub = A201,A202,A203,A204,A205,A206 A1为雄性,A2为雌性。 我需要读取文件,每次它到达单词组时,将组的名称存储在数组中,例如,A_1。 然后转到下一行,将组中的主题存储为另一个数组[A101、A102、A103、A104]。 然后我需要将组名与组中男性和女性的受试者合并,如下所示: [A_1,A10

我有一个文件,其中包括以下数据行:

group = A_1
group_sub = A101,A102,A103,A104
group = A_2
group_sub = A201,A202,A203,A204,A205,A206
A1为雄性,A2为雌性。 我需要读取文件,每次它到达单词组时,将组的名称存储在数组中,例如,A_1。 然后转到下一行,将组中的主题存储为另一个数组[A101、A102、A103、A104]。 然后我需要将组名与组中男性和女性的受试者合并,如下所示:

[A_1,A101,A102,A103,A104] (for males)
[A_2,A201,A202,A203,A204,A205,A206] (for females)
我的代码:

public class Test {
    File fromFile = new File(filename);         
    BufferedReader br = new BufferedReader(new FileReader(fromFile));
    String line;
    while ((line = br.readLine()) != null){
        String[]groupTitle = null;
        String[]groupSubjects = null;
        if (line.startsWith("group")){  
            String[] title = line.split("= ");                
            groupTitle= title[1].split(" ");
          //  System.out.println(Arrays.toString(groupTitle));
        }
            if (line.startsWith("group_sub")){
                 String[] names = line.split("= ");   
                 groupSubjects= names[1].split(", "); 
                // System.out.println(Arrays.toString(groupSubjects));
            }

            String[] both = new String[groupTitle.length + groupSubjects.length];
            System.arraycopy(groupTitle, 0, both, 0, groupSubjects.length);
            System.arraycopy(groupSubjects, 0, both, groupTitle.length, groupSubjects.length);
}
}
此时,从循环内部打印出:

[A_1]
[A101,A102,A103,A104]
[A_2]
[A201,A202,A203,A204,A205,A206]
当我尝试合并数组时,它们返回空。我做错了什么?

在第一次调用arraycopy时,您将要复制的组件数指定为groupSubjects.length,但您希望将groupTitle数组同时复制到数组中

所以如果你改变

System.arraycopygroupTitle,0,两者,0,groupSubjects.length

System.arraycopygroupTitle,0,两者,0,groupTitle.length


它将首先将groupTitle数组添加到这两个数组中。在这之后,您的第二条语句将把groupSubjects数组附加到这两个数组中,并且您的数组将被合并。

尝试这段代码我们需要做的是首先对group进行合并,然后对group\u sub进行合并,所以我们必须在group\u sub之后合并数组

这将产生这样的输出

[A_1, A101,A102,A103,A104]
[A_2, A201,A202,A203,A204,A205,A206]
试试这个代码

public class Test {
    File fromFile = new File("Data.txt");         
BufferedReader br = new BufferedReader(new FileReader(fromFile));
for ( String line = br.readLine() ; line !=null;line=br.readLine())
{
    String[]groupTitle = null;
    String[]groupSubjects = null;
    System.out.println ( line );
    if (line.startsWith("group"))
    {  
        String[] title = line.split("= ");                
        groupTitle= title[1].split(" ");
      //  System.out.println(Arrays.toString(groupTitle));
    } 
    line = br.readLine();
    if (line.startsWith("group_sub"))
    {
            System.out.println ( line );
            String[] names = line.split("= ");
             System.out.println ( names.length );
             groupSubjects= names[1].split(", "); 
//             System.out.println(Arrays.toString(groupSubjects));
    }
        String[] both = new String[groupTitle.length + groupSubjects.length];
        System.arraycopy(groupTitle, 0, both, 0, groupTitle.length);
        System.arraycopy(groupSubjects, 0, both, groupTitle.length, groupSubjects.length);
       System.out.println(Arrays.toString(both));
}
}

它似乎不起作用,我在String[]both=newstring[groupTitle.length+groupSubjects.length]处得到一个空指针异常;我已经测试了这个程序。在您的程序中,您犯了一个错误,首先您正在读取组,然后您没有读取下一行,因此groupSubjects.length的值将为空。这就是您获得空指针异常的原因;是的。我甚至认为括号有问题,但不是这样……好吧,我发现了我的错误——我的字符串[]groupTitle=null;字符串[]groupSubjects=null;在while循环中。然而,当我把它放在循环外时,它看起来确实合并了,但却多次打印出每个数组。当我尝试将最后三条语句放在secone if中时也发生了同样的事情,正如我在回答中所说的。是的,现在我移动了if循环,它工作了!谢谢您:
public class Test {
    File fromFile = new File("Data.txt");         
BufferedReader br = new BufferedReader(new FileReader(fromFile));
for ( String line = br.readLine() ; line !=null;line=br.readLine())
{
    String[]groupTitle = null;
    String[]groupSubjects = null;
    System.out.println ( line );
    if (line.startsWith("group"))
    {  
        String[] title = line.split("= ");                
        groupTitle= title[1].split(" ");
      //  System.out.println(Arrays.toString(groupTitle));
    } 
    line = br.readLine();
    if (line.startsWith("group_sub"))
    {
            System.out.println ( line );
            String[] names = line.split("= ");
             System.out.println ( names.length );
             groupSubjects= names[1].split(", "); 
//             System.out.println(Arrays.toString(groupSubjects));
    }
        String[] both = new String[groupTitle.length + groupSubjects.length];
        System.arraycopy(groupTitle, 0, both, 0, groupTitle.length);
        System.arraycopy(groupSubjects, 0, both, groupTitle.length, groupSubjects.length);
       System.out.println(Arrays.toString(both));
}
}