как преобразовать эту строку в двухмерный массив с помощью Java - PullRequest
2 голосов
/ 17 мая 2010

У меня есть текстовый файл

    0B85     61
    0B86     6161
    0B86     41
    0B87     69
    0B88     6969
    0B88     49
    0B89     75
    0B8A     7575
    0B8F     6565

Я хочу записать эту строку в двухмерный массив. (то есть) String read[0][0]=0B85 и String read[0][1]=61. Пожалуйста, предложите любую идею сделать это с помощью Java. Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 17 мая 2010

Примерно так работает:

String s = "0B85 61 0B86 6161 0B86 41 0B87 69 0B88"
    + " 6969 0B88 49 0B89 75 0B8A 7575 0B8F 6565";
String[] parts = s.split(" ");
String[][] table = new String[parts.length / 2][2];
for (int i = 0, r = 0; r < table.length; r++) {
    table[r][0] = parts[i++];
    table[r][1] = parts[i++];
}
System.out.println(java.util.Arrays.deepToString(table));
// prints "[[0B85, 61], [0B86, 6161], [0B86, 41], [0B87, 69],
//   [0B88, 6969], [0B88, 49], [0B89, 75], [0B8A, 7575], [0B8F, 6565]]

По сути, вы split(" ") длинную строку разделяете на части, а затем упорядочиваете части в 2 столбца String[][] table.

Тем не менее, лучшим решением для этого было бы иметь класс Entry для каждой строки и иметь List<Entry> вместо String[][].


ПРИМЕЧАНИЕ: был скинут путем форматирования, выдерживая выше, но вот что нужно

Если у вас есть columns.txt, содержащий следующее:

    0B85     61
    0B86     6161
    0B86     41
    0B87     69
    0B88     6969
    0B88     49
    0B89     75
    0B8A     7575
    0B8F     6565

Затем вы можете использовать следующее, чтобы расположить их в 2 столбца String[][]:

import java.util.*;
import java.io.*;
//...

    List<String[]> entries = new ArrayList<String[]>();
    Scanner sc = new Scanner(new File("columns.txt"));
    while (sc.hasNext()) {
        entries.add(new String[] { sc.next(), sc.next() });
    }
    String[][] table = entries.toArray(new String[0][]);
    System.out.println(java.util.Arrays.deepToString(table));

Еще раз повторю, что List<Entry> намного лучше, чем String[][].

Смотри также

  • Effective Java 2nd Edition, Item 25: Предпочитать списки массивам
  • Effective Java 2nd Edition, Item 50: Избегайте строк, для которых более подходящими являются другие типы
0 голосов
/ 17 мая 2010

Что-то вроде (псевдокод):

parts = yourData.split()
out = new String[ parts.length/2 ][2];
int j=0;
for i=0, i < parts.length -1, i+2:
  out[j][0] =  parts[i]
  out[j][1] = parts[i+1] 
  j++
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...