Строка Java, разделенная запятой

#java

#java

Вопрос:

У меня есть этот код ниже, который дает мне этот вывод

 1,2,3,4,3,4,5,4,3,5,3,4,5,5,4,64,
[Ljava.lang.String;@3e25a5
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
  

The input.txt файл содержит 1,2,3,4,3,4,5,4,3,5,3,4,5,5,4,64,

Код такой. Понятно, что при разделении есть простая ошибка, но мне трудно найти, какая.

 public static void main(String[] args) {
    // TODO Auto-generated method stub



    try{
        FileInputStream fstream = new FileInputStream("input.txt");
        DataInputStream  dat = new DataInputStream (fstream);
        BufferedReader in = new BufferedReader(new InputStreamReader(dat));
        String[] str ;

        int arr[] = new int [100];


        String line;

        while ((line = in.readLine()) != null)
            {

                System.out.println(line);
                str = line.split(",");
                System.out.println(str);

                for(int i = 0 ;i<str.length ; i  )
                {
                    arr[i]= Integer.parseInt(str[i]);
                    System.out.println(arr);
                }
            }

        fstream.close();

    }

    catch(IOException e)
    {
        System.out.print(e);
    }


}
  

Комментарии:

1. Какой вывод вы хотите?

2. Вы получите, NumberFormatException потому что у вас есть запятая в конце, а split() функция выдаст вам пустую строку в конце вашего массива.

Ответ №1:

Измените это

    System.out.println(arr);
  

Для

    System.out.println(arr[i]);
  

до этого вы печатали массив arr , а не элементы массива.

Ответ №2:

Похоже, что вы повторно печатаете массив, что приведет к тому, что Java вызовет метод toString() массива, который выдаст вам выходные данные, подобные предоставленным вами.

Чтобы исправить это, попробуйте изменить свой цикл на этот:

 for(int i = 0 ;i<str.length ; i  )
{
    arr[i]= Integer.parseInt(str[i]);
    System.out.println(arr[i]];
}
  

Чтобы дать вам более четкое представление о том, что происходит, эта программа сделает нечто подобное:

 public class Test {
    public static void main(String[] args) {
        System.out.println(new int[0]);
    }
}
  

Это выведет:

 [I@164f1d0d
  

Ответ №3:

Распечатав массив в

  System.out.println(arr);
  

вы эффективно распечатываете Object , который оказывается Array объектом. У этого есть toString() метод, и он имеет тенденцию распечатывать Class объект и hashcode() ссылку.

Теперь, поскольку ваш массив имеет примитивный тип, он выглядит следующим образом

 [I@19821f
  

где каждый элемент что-то означает

 [ => "an array of"
I => "primitive integer"
@19821f => "which has a hashcode of 0x19821f"
  

Обратите внимание, что это соглашение по умолчанию, означающее, что, хотя это то, что вы видите, вы не можете рассчитывать на этот метод чтения в том же смысле слова, что и гарантия.

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

Ответ №4:

удалите ненужные системные запросы, чтобы получить точный результат. и в последнем системном выводе выведите элемент неполного массива.

Ответ №5:

 str = line.split(",");
  

Если строка содержит запятую, то вам не следует использовать split()

Комментарии:

1. -1: Это не имеет смысла и кажется совершенно неправильным. Если в строке есть запятая, это не причина не использовать split