Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件中的ArrayList(特定格式)_Java_File_Input_Arraylist - Fatal编程技术网

Java 文件中的ArrayList(特定格式)

Java 文件中的ArrayList(特定格式),java,file,input,arraylist,Java,File,Input,Arraylist,我有一个文件如下所示: 1st ­ ­ ­ ­­­ 2nd ­ ­ ­ ­­­ nth e1­ ­ ­ ­ ­­­ ­­v1 ­ ­ ­ ­­­ 1 e1 ­ ­ ­ ­­­ v3 ­ ­ ­ ­­­ 2 e1 ­ ­ ­ ­­­ v4 ­ ­ ­ ­­­ 4 e1 ­ ­ ­ ­­­ v5 ­ ­ ­ ­­­ 7 e2 ­ ­ ­ ­­­ v1 ­ ­ ­ ­­­ 1 . ­ ­ ­ ­

我有一个文件如下所示:

    1st ­ ­ ­   ­­­ 2nd ­ ­ ­   ­­­ nth
    e1­ ­ ­ ­   ­­­ ­­v1 ­ ­ ­   ­­­ 1
    e1 ­ ­ ­   ­­­ v3 ­ ­ ­   ­­­ 2
    e1 ­ ­ ­   ­­­ v4 ­ ­ ­   ­­­ 4
    e1 ­ ­ ­   ­­­ v5 ­ ­ ­   ­­­ 7
    e2 ­ ­ ­   ­­­ v1 ­ ­ ­   ­­­ 1
    . ­ ­ ­   ­ ­ ­. ­ ­ ­  ­ ­ ­­­ .
    . ­ ­ ­   ­ ­ ­. ­ ­ ­   ­­­  .
    . ­ ­ ­   ­ ­ ­.      ­  .
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '\t');
我希望第一列是arraylist(e1、e2或e3)的名称,第二列的值(int)位于第n个索引内

我该怎么做呢

如果你想进一步澄清我的意思,请不要害怕离开下午

p、 这是一个更大项目的一部分,但我对数据的格式有点执着

我假设我必须查找一个名为(第一列)的arraylist,若找到它,然后在第n个值(第3列)处添加值(第2列),若找不到,则生成一个arraylist,然后执行上述操作

更新

所以我设法让程序几乎正常工作——我不能使用ArrayList的原始结构,因为所有变量都必须在编译期间声明——之后不能声明。 我决定使用一个hashmap,其中键有第一个值,第n个位置有第二个值的arraylist:

`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)
        {
        }`
`HashMap userRatings=newhashmap();
如果(!userRatings.containsKey(user))//用户没有评级。
{
ArrayList ratings=新的ArrayList();
//ratings=userRatings.get(用户);
对于(int j=0;j<50;j++)
{
增加(j);
}
获取(用户)、添加(位置、值);
}                }
else//用户有评级
{
获取(用户)、添加(位置、值)**
}
System.out.println(用户+“”+userRatings.get(用户));
}
bufferReader.close();
}catch(filenotfounde异常)
{
System.out.println(“文件不存在或找不到”);
}
捕获(IOE异常)
{
System.out.println(“无法从文件中读取”);
}
捕获(NullPointerException e)
{
}`
我现在的问题是添加到arraylist。我将如何在粗体区域执行此操作?--如何填充和操作arraylist


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

如果使用正确的库,这很容易。看看这个:,它是用来解析csv文件的。从该网站:

我可以使用自己的分隔符和引号字符吗? 对。有 建造商提供自己的分离器和报价 人物。假设您正在使用分隔符选项卡,您可以 大概是这样的:

    1st ­ ­ ­   ­­­ 2nd ­ ­ ­   ­­­ nth
    e1­ ­ ­ ­   ­­­ ­­v1 ­ ­ ­   ­­­ 1
    e1 ­ ­ ­   ­­­ v3 ­ ­ ­   ­­­ 2
    e1 ­ ­ ­   ­­­ v4 ­ ­ ­   ­­­ 4
    e1 ­ ­ ­   ­­­ v5 ­ ­ ­   ­­­ 7
    e2 ­ ­ ­   ­­­ v1 ­ ­ ­   ­­­ 1
    . ­ ­ ­   ­ ­ ­. ­ ­ ­  ­ ­ ­­­ .
    . ­ ­ ­   ­ ­ ­. ­ ­ ­   ­­­  .
    . ­ ­ ­   ­ ­ ­.      ­  .
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '\t');

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

我的意思是,除了让互联网上的随机陌生人帮你做这件事之外。老实说,我认为最初的问题是以这种格式读取文件。我想我能处理剩下的事。你的假设听起来不错。你能不能先试试,如果代码没有按预期工作,就发布你的代码。我成功地从文件部分读取数据,现在我遇到了一个意外的问题。。。我没有意识到变量的名称不能基于输入(我希望每个数组的名称都是字母“s”+第一列中的数字。那么:s1000、s1001、s1002等等。在保持代码的整体结构不变的情况下,我如何处理这个问题?我不确定我是否理解,但如果您的意思是希望根据数据文件的输入来确定Java变量的实际名称,那么我会说这不是一个好主意。此外,我认为这不是一个好主意无论如何都有可能。想想这个问题,我向你保证有更好的解决方法。如果你愿意,我很乐意帮助你。@Hassan嘿,请检查我关于原始问题的更新说明。你认为我的思路正确吗?你有IM吗?到目前为止看起来不错,但我不太理解你的新问题。我强烈建议这样做你可以在一个新问题中问这个问题,包括所有的细节等等。我很乐意看,但我相信其他人会比我更有帮助。一旦新问题出现,就发布一个新问题的链接。@Hassan太好了!下面是新问题的链接