Java奇怪的输出:[Ljava.lang.String; @ 1aa8c488(string.split(“\\ s”))

时间:2011-12-21 15:54:08

标签: java regex string

我有一个非常简单的解析器分割字符串:

import java.io.*;
import java.util.ArrayList;
import java.util.List;


public class Parser {

public static void main(String args[]){

    String newLog = new String();
    try {
        BufferedReader reader = new BufferedReader(new FileReader("/Users/John/IdeaProjects/tomcatParser/src/log.log"));
        try {
            while ((newLog = reader.readLine()) != null){
                System.out.println(newLog.split("\\s"));
                //System.out.println(newLog.split(" "));
                break;
            }
            //reader.close();
        } catch (IOException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
}
}

正如你所看到的,我有完全简单的代码,但结果我看到了:

[Ljava.lang.String;@1aa8c488

我做错了什么?

5 个答案:

答案 0 :(得分:4)

您尝试打印数组对象:这不会打印数组成员,而是打印数组引用。

一种解决方案:使用Arrays.asList()环绕,即:

System.out.println(Arrays.asList(newLog.split("\\s")));

(更好的解决方案:根据其他答案的建议使用Arrays.toString()。您每天都会学到新东西。)

答案 1 :(得分:3)

当您尝试直接打印数组时,这就是您所获得的。它使用toString类的Object方法,该方法打印出类的名称,符号字符和对象哈希码的无符号十六进制表示。你获得数组的“身份”,而不是其内容的文本表示。

相反,请使用:

System.out.println(Arrays.toString(newLog.split("\\s")));

答案 2 :(得分:1)

System.out.println适用于字符串。当您传递非字符串的对象时,会自动调用方法toString(),并且您会看到此调用的结果。

您正在使用数组参数调用System.out.println,这就是数组toString()的工作方式。要查看更好的输出使用

System.out.println(Arrays.toString(newLog.split("\\s")))

答案 3 :(得分:1)

方法String.split(String regEx)返回字符串数组(String[])。

当您在Java中尝试System.out.println任何Object时,它会调用此对象toString()方法。您看到的数组返回的toString()方法就是您所看到的。

改为使用System.out.println(Arrays.toString(newLog.split("\\s")));

答案 4 :(得分:0)

而不是:

while ((newLog = reader.readLine()) != null){
    System.out.println(newLog.split("\\s"));
    //System.out.println(newLog.split(" "));
    break;
}

你的代码应该是:

while ((newLog = reader.readLine()) != null){
  String [] columns = newLog.split("\\s"); 
  for (String result : columns) {
    System.out.print(result);
  }
  break;
}