Как добраться до определенного элемента в списке в 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 и т.д.
Ответы
Ответ 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("\\]| |\\[","")
Ответ 3
В этот момент:
for (String[] s : myEntries) {
System.out.println("Next item: " + s);
}
Вам нужно присоединиться к массиву строк в строке. Проверьте это сообщение:
Метод обратного эффекта java String.split()?
Ответ 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+");
. Регулярный бит экспресии смещается на пробелы, он должен сделать трюк