-2

我有一个看起来像这样的文件:

    1st ­ ­ ­   ­­­ 2nd ­ ­ ­   ­­­ nth
    e1­ ­ ­ ­   ­­­ ­­v1 ­ ­ ­   ­­­ 1
    e1 ­ ­ ­   ­­­ v3 ­ ­ ­   ­­­ 2
    e1 ­ ­ ­   ­­­ v4 ­ ­ ­   ­­­ 4
    e1 ­ ­ ­   ­­­ v5 ­ ­ ­   ­­­ 7
    e2 ­ ­ ­   ­­­ v1 ­ ­ ­   ­­­ 1
    . ­ ­ ­   ­ ­ ­. ­ ­ ­  ­ ­ ­­­ .
    . ­ ­ ­   ­ ­ ­. ­ ­ ­   ­­­  .
    . ­ ­ ­   ­ ­ ­.      ­  .

我希望第一列是数组列表的名称(e1 或 e2 或 e3),我希望第二列在第 n 个索引内具有它的值(一个 int)。

我该怎么做呢?

如果您想进一步澄清我的意思,请不要害怕留下一个下午。

ps 这是一个更大项目的一部分,但我有点卡在数据的格式上。

我假设我必须寻找一个名称为(第一列)的数组列表,如果我找到它,然后在第 n 个值(第 3 列)处添加值(第 2 列),如果我没有找到它,我创建一个arrayList,然后执行上述操作。

更新

所以我设法让程序几乎可以工作——我不能使用 ArrayLists 的原始结构,因为所有变量都必须在编译期间声明——不能在之后声明。我决定使用哈希图,键具有第一个值,以及第 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)
        {
        }`

我现在遇到的问题是添加到数组列表中。我将如何在粗体​​区域中做到这一点?-- 我将如何填充和操作数组列表?

4

1 回答 1

1

老实说,我认为最初的问题在于以这种格式读取文件。

如果您使用正确的库,这很容易。看看这个: http: //opencsv.sourceforge.net/,它是用来解析 csv 文件的。从那个网站:

我可以使用自己的分隔符和引号字符吗?

是的。有一些构造函数可以提供您自己的分隔符和引号字符。假设您使用制表符作为分隔符,您可以执行以下操作:

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '\t');

我认为这正是你想要做的。您要求此库使用制表符分隔的值而不是逗号分隔的值来解析输入文件。从上面的示例中,这似乎是您的输入格式。

于 2012-05-31T05:45:05.653 回答