2013-05-17 69 views
0

我有一个由列空格分隔的n列和n行的文本文件..我如何使用split函数将列和行存储到散列表中。请帮忙。
我的文本文件就会像..
使用分隔符 t分割一个文本文件并存储在hashmap中的java

部门ID名称联系
IT 1 ZZZ 678

ECE 2 TTT 789

IT 3 RRR 908

我试过以下。但它力气工作。

Map<String,String> map=new HashMap<String,String>(); 
while(lineReader!=null) 
{ 
String[] tokens = lineReader.split("\\t"); 
key = tokens[0]; 
values = tokens[1]; 
map.put(key , values); 
System.out.println("ID:"+map.get(key)); 
System.out.println("Other Column Values:"+map.get(values)); 
} 

这将返回文件的最后一项(行)的键和值为空。但我需要在地图中存储所有行和列。我该怎么做?

+0

您没有指定您遇到的错误?在此之前,在循环外创建你的HashMap。到目前为止,每次循环运行时它都会创建一个hashmap。 – Sanjeev

+0

是的,它已经宣布它在循环之外。并指定了错误。如果我运行的代码,它给出,ID:3(这是该文件的最后一行)和..其他列值:空 – user2376600

+0

哈希映射只能有一个键和它的值。这里你有4列。哪一列是你的关键字,哪些列应该是值? – Sanjeev

回答

0

如果我正确理解你的数据,

String[] tokens = lineReader.split("\\t"); 

在第一线处理,你必须在数组中4个令牌。

我认为你正在使用错误的逻辑,如果你想存储下列方式映射:

IT - >(1个ZZZ 678) ....等,那么你需要以不同的方式处理数据。

你所存储的地图如下: IT - > 1 ECE - > 2 ... 等。

这就是为什么你会得到空当你正在尝试做的:

map.get(value); 

则应该打印是什么重点map.get(键)

其实,无论如何我不认为地图是你想要的(但我不知道你真正想要什么)。

不过现在,你的这个问题的理解尝试打印:

System.out.println("Total collumns: "+ tokens.length); 

更新时间:

这应该为你工作。它不是你想要的最优雅的实现,而是完成工作。你应该从这里尝试改进它。

Map<String,String> map=new HashMap<String,String>(); 
while(lineReader!=null) 
{ 
String[] tokens = lineReader.split("\\t"); 
key = tokens[1]; 
values = tokens[2]+tokens[3]; 
map.put(key , values); 
System.out.println("ID:"+key); 
System.out.println("Other Column Values:"+map.get(key)); 
} 

祝你好运!

+0

截至目前,我需要存储.. 1,2,3作为键和这些键的值分别作为映射的值... IT组将被避免用于当前需求。 – user2376600

+0

我在我的文本文件中有5列,它打印的长度为6. – user2376600

+0

好的,你从来没有在问题中提到过。下一次尝试清楚地阐明问题。请看看我的更新答案是否有帮助。 – zEro

相关问题