【问题标题】:[Ljava.lang.String; error when trying to split Array List in Java [duplicate][Ljava.lang.String; error when trying to split Array List in Java [duplicate]
【发布时间】:2021-03-09 09:49:41
【问题描述】:

我对 java 还很陌生,我相信问题出在我缺乏理解上。

我正在尝试读取 CSV 值的数组列表。以下是我的代码:

    public static void readFile(){
        String line = "";
        try{
            BufferedReader br = new BufferedReader(new FileReader(Main.filepath));

            while((line = br.readLine()) != null){  //reads whilst the next line is not null
                fileData.add(line);                 //adds current line to array list
        }
        catch (Exception ex){
            System.out.println("File Not Found");   //if file not found, print
        }
    }
public class Film{
    public static void duration(){
        readFile();
        for (int i = 0; i < (fileData.size()); i++) {
            //System.out.println(fileData);
            String[] temp = fileData.get(1).split(",");
            System.out.println(temp);
        }
    }

readFile() 读取 CSV 文件并将每一行保存为 ArrayList 中的一个元素

filedata 是数组列表

filepath是文件的路径

CSV 文件格式为"filmName,releaseDate,filmRating,filmGenre,filmDuration,filmScore"

我试图让 Film() 打印出 ArrayList 中每个元素的发布日期,但是我的输出是:

[Ljava.lang.String;@6bf2d08e
[Ljava.lang.String;@5eb5c224
[Ljava.lang.String;@53e25b76
[Ljava.lang.String;@73a8dfcc

当我期待更多类似的东西时

1999
2007
1956
1987

感谢任何帮助。

【问题讨论】:

    标签: java csv file arraylist split


    【解决方案1】:

    遍历数组tmp 的每个String 并打印该值。此外,您应该将fileData.get(1).split(","); 替换为fileData.get(i).split(",");

     for (int i = 0; i < (fileData.size()); i++) {
                String[] tmp = fileData.get(i).split(",");
                for(String t : tmp)
                    System.out.println(tmp);
       }
    

    如果您System.out.println(); 基本上将打印的数组,每个字符串哈希码。或者,您可以使用Arrays.toString 一次性打印整个数组:

    for (String fileDatum : fileData) {
        String[] tmp = fileDatum.split(",");
        System.out.println(Arrays.toString(tmp));
    }
    

    最后,您使用 Java 中的 Streams,您可以将方法简化为:

     fileData.stream().map(i -> i.split(",")).forEach(i -> Arrays.asList(i).forEach(System.out::println));
    

    或使用不同的格式样式:

      fileData.stream().map(i -> i.split(",")).map(Arrays::toString).forEach(System.out::println);
    

    【讨论】:

      【解决方案2】:
      String[] temp = fileData.get(1).split(",");
      System.out.println(temp);
      

      这会打印出带有 toString 默认实现的数组:

      返回对象的字符串表示形式。一般来说, toString 方法返回一个“以文本形式表示”的字符串 目的。结果应该是简洁但信息丰富的表示 这对一个人来说很容易阅读。建议所有 子类覆盖此方法。

      Object 类的 toString 方法返回一个字符串,该字符串由 对象是其实例的类的名称,at 符号 字符“@”和哈希的无符号十六进制表示 对象的代码。换句话说,这个方法返回一个字符串等于 值:

       getClass().getName() + '@' + Integer.toHexString(hashCode())
      

      在您的情况下,您需要再次遍历 Array 并使用 toString 弹出每个元素

      【讨论】:

        【解决方案3】:

        您必须首先在循环中将 i 变量而不是 1 冷藏,然后 split 方法返回一个字符串数组,因此您应该在数组中选择正确的值:

         String[] temp = fileData.get(i).split(",");
         System.out.println(temp[1]);
        

        【讨论】:

          猜你喜欢
          • 2022-12-01
          • 2022-12-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-13
          • 2020-03-12
          • 2022-12-16
          • 2022-11-20
          • 2022-12-02
          相关资源
          最近更新 更多