在输入文件中,有2列: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
答案 0 :(得分:2)
您正在使用标记作为数组(标记[1])并为其指定String.split(“”)的值。所以它清楚地表明令牌的类型是String []数组。
接着, 你试图在分割标记之后设置词缀的值[3],我们知道标记[3]是String类型,所以在该字符串上调用split函数将产生另一个String []数组。
所以以下是错误的,因为你正在创建一个String,而你需要String []
String affixes = " ";
所以正确的类型应该是这样的:
String[] affixes = null;
然后你可以继续为它分配一个数组。
affixes = tokens[3].split(" ");
答案 1 :(得分:0)
你在找这样的东西吗?
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