Подтвердить что ты не робот

Как добраться до определенного элемента в списке в java?

У меня есть файл CSV. Он имеет много линий. В каждой строке есть несколько значений, разделенных запятыми.

Я использую OPENCSV для извлечения данных из файла. Я хочу иметь возможность напрямую перейти к любой конкретной строке, которая находится в структуре данных списка.

CSVReader reader = new CSVReader(new FileReader(
                    "myfile.csv"));
            try {
                List<String[]> myEntries = reader.readAll();
                for (String[] s : myEntries) {
                    System.out.println("Next item: " + s);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

Отпечатает

Next item: [Ljava.lang.String;@6c8b058b
Next item: [Ljava.lang.String;@1b192059
Next item: [Ljava.lang.String;@e9ac0f5
Next item: [Ljava.lang.String;@51f21c50
Next item: [Ljava.lang.String;@6e20f237
Next item: [Ljava.lang.String;@34fe315d
Next item: [Ljava.lang.String;@1c5aebd9
Next item: [Ljava.lang.String;@1532021a
Next item: [Ljava.lang.String;@62803d5
Next item: [Ljava.lang.String;@2d13981b
Next item: [Ljava.lang.String;@61672bbb

Я хочу знать, есть ли в любом случае доступ к отдельным строкам, элементам через List.

i.e

    1,2,3,4,5
    6,7,8,9,10
    11,12,13,14
    15,16,17,18

Я хочу String [] nextLine = 1,2,3,4,5 (где nextLine [0] = 1 nextLine [1] = 2 и т.д.), а в следующей итерации nextLine должен быть 6,7,8,9, 10 и т.д.

4b9b3361

Ответ 1

Интерфейс List поддерживает произвольный доступ через метод get - для получения строки 0, используйте list.get(0). Вам нужно будет использовать доступ к массиву, т.е. lines.get(0)[0] - это первый элемент первой строки.

Смотрите javadoc здесь.

Ответ 2

Метод типов toString для типов массивов в Java не имеет особого смысла, кроме как сообщать вам, что это массив.

Вы можете использовать java.util.Arrays.toString для этого.

Или, если ваши строки содержат только цифры, и вы хотите использовать строку 1,2,3,4... вместо [1, 2, 3, ...], вы можете использовать:

java.util.Arrays.toString(someArray).replaceAll("\\]| |\\[","")

Ответ 4

У вас около 98% права. Единственная проблема заключается в том, что вы пытаетесь распечатать строку [], которая не печатает, как вам хотелось бы. Вместо этого попробуйте это...

for (String[] s : myEntries) {
    System.out.print("Next item: " + s[0]);
    for(int i = 1; i < s.length; i++) {
        System.out.print(", " + s[i]);
    }
    System.out.println("");
}

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

Надеюсь, это поможет!

Ответ 5

String [] - это массив строк. Такой массив является внутренне классом. Как и все классы, которые явно не распространяют какой-либо другой класс, он неявно расширяет Object. Метод toString() класса Object по умолчанию дает вам представление, которое вы видите: имя класса, за которым следует @, за которым следует хеш-код в шестнадцатеричном формате. Поскольку класс String [] не переопределяет метод toString(), вы получите это как результат.

Создайте некоторый метод, который выводит элементы массива для вас. Итерируйте по массиву и используйте System.out.print() (not print * ln *) для элементов.

Ответ 6

CSVReader reader = new CSVReader(new FileReader(
                "myfile.csv"));
        try {
            List<String[]> myEntries = reader.readAll();
            for (String[] s : myEntries) {
               for(String ss : s) {
                   System.out.print(", " + ss);
               }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }

Ответ 7

Отметьте функцию разделения String здесь и используйте ее как-то вроде String[] results = input.split("\\s+");. Регулярный бит экспресии смещается на пробелы, он должен сделать трюк