Странный вывод на Java: [Ljava.lang.String; @ 1aa8c488 (string.split ("\\ s")) - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть очень простая строка разбиения парсера:

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 ]

4 голосов
/ 21 декабря 2011

Вы пытаетесь напечатать объект массива: это будет печатать не элементы массива, а ссылку на массив.

Одно решение: окружить Arrays.asList(), то есть:

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

(лучшее решение: используйте Arrays.toString(), как подсказывают другие ответы. Вы узнаете что-то новое каждый день.)

3 голосов
/ 21 декабря 2011

Это то, что вы получаете, когда пытаетесь напечатать массив напрямую.Он использует метод toString класса Object, который печатает имя класса, символ знака и шестнадцатеричное представление без знака хеш-кода объекта.Вы получаете «идентичность» массива, а не текстовое представление его содержимого.

Вместо этого используйте:

System.out.println(Arrays.toString(newLog.split("\\s")));
1 голос
/ 21 декабря 2011

Метод String.split(String regEx) возвращает массив строк (String[]).

Когда вы пытаетесь System.out.println любой Object в Java, он вызывает метод объекта toString().toString() метод для возврата массива - это то, что вы видите.

Используйте взамен System.out.println(Arrays.toString(newLog.split("\\s")));.

1 голос
/ 21 декабря 2011

System.out.println работает со строкой.Когда вы передаете объект, который не является строкой, его метод toString() вызывается автоматически, и вы видите результат этого вызова.

Вы вызываете System.out.println с аргументом массива, и вот как toString() массивовРабота.Чтобы увидеть лучший результат, используйте

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

0 голосов
/ 21 декабря 2011

вместо:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...