如何将表解析为Java数据结构?

如何将表解析为Java数据结构?,java,csv,parsing,matrix,tabular,Java,Csv,Parsing,Matrix,Tabular,我有一个包含以下矩阵/表格的文本文件: # Matrix size is 13x13 DEPOT CHESHNT LIVST CHINGFD ENFLDTN HERTFDE BSHPSFD CAMBDGE STFD ELYY KLYNN STANAIR BROXBRN DEPOT 00:00 01:00 00:28 00:02 00:40 01:00 00:02 00:05 01:00 00:30 01:00

我有一个包含以下矩阵/表格的文本文件:

# Matrix size is 13x13
        DEPOT   CHESHNT LIVST   CHINGFD ENFLDTN HERTFDE BSHPSFD CAMBDGE STFD    ELYY    KLYNN   STANAIR BROXBRN
DEPOT   00:00   01:00   00:28   00:02   00:40   01:00   00:02   00:05   01:00   00:30   01:00   00:31   01:00   
CHESHNT 01:00   00:00   00:38   01:00   01:03   01:27   01:02   01:05   01:56   01:21   02:00   01:25   02:00   
LIVST   00:28   00:38   00:00   00:22   00:25   00:49   01:00   01:27   01:20   01:44   01:24   00:47   01:24   
CHINGFD 00:02   01:00   00:20   00:00   00:42   01:02   00:45   01:30   00:58   01:45   01:30   00:45   01:02   
ENFLDTN 00:40   01:03   00:25   00:42   00:00   01:14   00:42   00:45   01:36   01:01   01:40   01:11   01:40   
HERTFDE 01:00   01:27   00:49   01:02   01:14   00:00   01:02   01:05   00:56   01:21   02:00   01:31   01:26   
BSHPSFD 00:02   01:02   01:00   01:00   00:42   01:02   00:00   00:30   00:54   00:47   01:02   00:33   01:02   
CAMBDGE 00:03   01:05   01:27   01:30   00:45   01:05   00:30   00:00   01:01   00:17   01:05   00:36   01:05   
STFD    01:00   01:56   01:20   00:58   01:36   00:52   00:54   01:01   00:00   01:17   01:56   01:06   00:30   
ELYY    00:22   01:30   01:44   01:45   01:10   01:30   00:47   00:17   01:26   00:00   01:30   01:01   01:30   
KLYNN   00:52   02:00   01:24   01:30   01:40   02:00   01:02   01:05   01:56   01:21   00:00   01:31   02:00   
STANAIR 00:31   01:12   00:36   00:45   00:52   01:12   00:33   00:36   01:02   00:53   01:12   00:00   01:12   
BROXBRN 01:00   02:00   01:24   01:02   01:40   01:23   01:02   01:05   00:31   01:21   02:00   01:31   00:00   
鉴于该结构非常常见,是否没有Java库可以解析为Java结构? 比如:

Map<String,String> matrix = MatrixParser.parse("matrix.txt"); //where the key is the concatenation of the row and column coordinates. 
Map matrix=MatrixParser.parse(“matrix.txt”)//其中,键是行坐标和列坐标的串联。
我可以看到使用OpenCSV将其解析为CSV,分隔符是空格或制表符,而不是逗号。没有更高级别的吗?

这在本手册中有介绍

从常见问题解答:

ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setType(YourOrderBean.class);
String[] columns = new String[] {"name", "orderNumber", "id"}; // the fields to bind do in your JavaBean
strat.setColumnMapping(columns);

CsvToBean csv = new CsvToBean();
List list = csv.parse(strat, yourReader);
也就是说,这并不难:)

您可以在几行代码中使用“拆分后”逐行执行相同的操作。伪代码:

cols = loadColumnNamesToArray();
while (moreLines()) {
    vals = line.split
    vals.each_with_index {
        colName = cols[index]
        valMap.put(colName, val)
    }
    bean = Bean.new
    BeanUtils.populate(bean, valMap)
    beanList.add(bean)
}
这在本手册中有介绍

从常见问题解答:

ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setType(YourOrderBean.class);
String[] columns = new String[] {"name", "orderNumber", "id"}; // the fields to bind do in your JavaBean
strat.setColumnMapping(columns);

CsvToBean csv = new CsvToBean();
List list = csv.parse(strat, yourReader);
也就是说,这并不难:)

您可以在几行代码中使用“拆分后”逐行执行相同的操作。伪代码:

cols = loadColumnNamesToArray();
while (moreLines()) {
    vals = line.split
    vals.each_with_index {
        colName = cols[index]
        valMap.put(colName, val)
    }
    bean = Bean.new
    BeanUtils.populate(bean, valMap)
    beanList.add(bean)
}

如果
String.split()
几乎涵盖了“库”,那么就没有理由使用“库”。一旦您使用OpenCSV解析了它,您就会发现将其转换为您所追求的数据结构非常简单。最多可能不超过几十行代码。当
String.split()
几乎涵盖了它时,实际上没有理由使用“库”。一旦你用OpenCSV解析了它,你会发现将它转换为你想要的数据结构非常简单。最多可能不超过几十行代码。你看这和我要找的地图不一样。我没有(也不想要)一个Bean。@simpatico使用没有Bean部分的代码。这并不像你想象的那么普遍;在12年的Java商业/科学应用程序中从未做到这一点。字符串的映射并不是那么有用,我几乎总是需要实际的数据结构,以便以类型安全的方式更容易地操作它们。你看,这与我正在寻找的映射不同。我没有(也不想要)一个Bean。@simpatico使用没有Bean部分的代码。这并不像你想象的那么普遍;在12年的Java商业/科学应用程序中从未做到这一点。字符串映射并不是那么有用,我几乎总是需要实际的数据结构,以便以类型安全的方式更容易地操作它们。