Java 数组列表中的数组

Java 数组列表中的数组,java,arrays,Java,Arrays,在输入文件中,有两列:1)词干,2)词缀。在我的编码中,我将每列识别为标记,即标记[1]和标记[2]。但是,对于令牌[2],其内容为:ng ny nge stem affixes ---- ------- nyak ng ny nge 我这里的问题是,如何声明令牌[2]下的内容?下面是我的代码片段: try { FileInputStream fstream2 = new FileInputStream(file2); DataInputStream in2 = new

在输入文件中,有两列:1)词干,2)词缀。在我的编码中,我将每列识别为标记,即标记[1]和标记[2]。但是,对于令牌[2],其内容为:ng ny nge

stem  affixes
----  -------
nyak  ng ny nge
我这里的问题是,如何声明令牌[2]下的内容?下面是我的代码片段:

try {
    FileInputStream fstream2 = new FileInputStream(file2);
    DataInputStream in2 = new DataInputStream(fstream2);
    BufferedReader br2 = new BufferedReader(new InputStreamReader(in2));

    String str2 = "";
    String affixes = " ";

    while ((str2 = br2.readLine()) != null) {

        System.out.println("Original:" + str2);

        tokens = str2.split("\\s");

    if (tokens.length < 4) {
            continue;
        }

    String stem = tokens[1];
    System.out.println("stem is: " + stem);

// here is my point

   affixes = tokens[3].split(" ");
   for (int x=0; x < tokens.length; x++)
    System.out.println("affix is: " + affixes);  

     }  

    in2.close();
  } catch (Exception e) {
    System.err.println(e);
  } //end of try2
试试看{
FileInputStream fstream2=新的FileInputStream(file2);
DataInputStream in2=新的DataInputStream(fstream2);
BufferedReader br2=新的BufferedReader(新的InputStreamReader(in2));
字符串str2=“”;
字符串词缀=”;
而((str2=br2.readLine())!=null){
系统输出打印项次(“原件:+str2”);
令牌=str2.split(\\s);
如果(标记长度<4){
继续;
}
字符串干=令牌[1];
System.out.println(“茎是:”+stem);
//这是我的观点
词缀=标记[3]。拆分(“”);
for(int x=0;x
您正在使用令牌作为数组(令牌[1]),并为其分配String.split(“”)的值。因此,它清楚地表明令牌的类型是String[]数组

其次,, 您试图在分割标记[3]后设置词缀的值,我们知道标记[3]属于String类型,因此对该字符串调用split函数将生成另一个String[]数组

因此,以下是错误的,因为您正在创建一个字符串,而您需要字符串[]

String affixes = " ";
因此,正确的类型应如下所示:

String[] affixes = null;
然后您可以继续并为其分配一个数组

affixes = tokens[3].split(" ");

你在找这样的东西吗

public static void main(String[] args) {
    String line = "nyak  ng ny nge";
    MyObject object = new MyObject(line);
    System.out.println("Stem: " + object.stem);
    System.out.println("Affixes: ");
    for (String affix : object.affixes) {
        System.out.println("  " + affix);
    }
}

static class MyObject {
    public final String stem;
    public final String[] affixes;

    public MyObject(String line) {
        String[] stemSplit = line.split(" +", 2);
        stem = stemSplit[0];
        affixes = stemSplit[1].split(" +");
    }
}
输出:

Stem: nyak
Affixes: 
  ng
  ny
  nge

你能把这段代码的输出发出去吗?也许这能帮助我们回答你的问题。我不确定你到底想达到什么目的?你想要令牌(2)来包含一个数组,每个词缀作为一个单独的项目吗?当然……词缀是否可以被看作是一个标记?我将使用'ng'并检入另一个文件,同时转到'ny'和'nge'。是的,词缀存储在字符串[]词缀中,这是一个长度为3的字符串数组。我尝试了编码,但仍然无法工作。词缀只带有标记[1]:ng..,因此它将其他标记视为标记[1]。因为我从输入文件中读取,有没有语法我遗漏了?它实际上是分隔词缀的空格字符,还是制表符或其他空格?代替拆分(“+”),你可以尝试拆分(“\s+”)。在语法上,只有一个空格来分隔词缀。但是它仍然把词缀看作是由NG NGE NY组成的一个标记。我的期望是NG=令牌[1 ],NGE=令牌(2)和NY=令牌(3)。现在,这些值将存储为:
词缀[0]=ng,词缀[1]=nge,词缀[2]=ny