如何将表解析为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商业/科学应用程序中从未做到这一点。字符串映射并不是那么有用,我几乎总是需要实际的数据结构,以便以类型安全的方式更容易地操作它们。