我有一个看起来像这样的文件:
1st 2nd nth
e1 v1 1
e1 v3 2
e1 v4 4
e1 v5 7
e2 v1 1
. . .
. . .
. . .
我希望第一列是arraylist的名称(e1,或e2,或e3),我希望第二列在第n个索引中包含它的值(一个int)。
我该怎么做呢?
如果您想进一步澄清我的意思,请不要害怕离开下午。
P.S。这是一个更大项目的一部分,但我有点坚持数据格式。
我假设我必须寻找名称(第一列)的arraylist,如果我找到它,那么在第n个值(第3列)添加值(第2列)如果我找不到它,我会创建一个arrayList,然后执行上述操作。
更新
所以我设法使程序几乎正常工作 - 我无法使用ArrayLists的原始结构,因为所有变量都必须在编译期间声明 - 不能在之后声明。 我决定使用一个hashmap,键具有第一个值,第二个值的arraylist在第n个位置:
`HashMap<String, ArrayList<Integer>> userRatings = new HashMap<String, ArrayList<Integer>>();
if(!userRatings.containsKey(user)) //The user does not have ratings.
{
ArrayList<Integer> ratings = new ArrayList<Integer>();
// ratings = userRatings.get(user);
for (int j = 0; j < 50; j++)
{
ratings.add(j);
}
userRatings.get(user).add(location,value);
} }
else //The user has ratings
{
userRatings.get(user).add(location,value);**
}
System.out.println(user + " " + userRatings.get(user));
}
bufferReader.close();
} catch (FileNotFoundException e)
{
System.out.println("File does not exist or could not be found.");
}
catch (IOException e)
{
System.out.println("Can't read from file");
}
catch (NullPointerException e)
{
}`
我现在遇到的问题是添加到arraylist。我怎么能在粗体区域做到这一点? - 我如何填充和操纵arraylist?
答案 0 :(得分:1)
老实说,我认为最初的问题是在阅读文件中 格式。
如果使用正确的库,这很容易。看一下这个:http://opencsv.sourceforge.net/,用于解析csv文件。从该网站:
我可以使用自己的分隔符并引用字符吗?
是。有 适合提供自己的分隔符和报价的构造函数 字符。假设您正在为分隔符使用选项卡,则可以执行此操作 像这样的东西:
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '\t');
我认为这正是你想要做的。您要求此库使用制表符分隔的值而不是逗号分隔来解析输入文件。从上面的示例中,这似乎是您的输入格式。