[ljava.lang.string;在java中尝试拆分数组列表时出错

3yhwsihp  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(419)

这个问题在这里已经有答案了

打印java数组最简单的方法是什么(32个答案)
上个月关门了。
我对java相当陌生,我相信问题来自于我对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

感谢您的帮助。
ryhaxcpt

ryhaxcpt1#

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

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

d8tt03nd2#

迭代每个 String 数组的 tmp 并打印该值。此外,你应该替换 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();` 基本上你要打印的数组,每个字符串都是hashcode。或者,您可以使用 `Arrays.toString` 要一次性打印整个阵列:

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

最后,使用来自java的流可以将方法简化为:

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);

yftpprvb

yftpprvb3#

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

这将使用tostring的默认实现打印出数组:
返回对象的字符串表示形式。通常,tostring方法返回一个字符串,该字符串“以文本形式表示”这个对象。结果应该是一个简洁,但信息丰富的代表,是一个人容易阅读。建议所有子类重写此方法。
class对象的tostring方法返回一个字符串,该字符串由对象作为示例的类的名称、at符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,此方法返回的字符串等于:

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

在这种情况下,您需要再次迭代数组,并使用tostring触发每个元素

相关问题