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));
}
}