我的文件pacs.txt
包含:
a,b,c,d
然后我有另一个文件members.txt
:
sara a,c
brad d,a
tammy c,b
我必须打印出来
a sara, brad
b tammy
c sara tammy
我编写了一个尝试执行此操作的代码。我进去向TA求助,她说我非常接近我只是弄乱了我的Treemap。有人可以帮我弄清楚我做错了什么。列表A是pacsFile,列表B是membersFile。
import java.io.*;
import java.util.*;
// N O C O M M A N D L I N E A R G S!
// A L L F I L E N A M E S M U S T B E H A R D C O D E D
public class Pacs
{
public static void main( String args[] ) throws Exception
{
BufferedReader pacsFile = new BufferedReader( new FileReader( "pacs.txt" ) );
BufferedReader membersFile = new BufferedReader( new FileReader( "members.txt" ) );
TreeMap<String,String> Map = new TreeMap<String,String>();
ArrayList<String> acroymn = new ArrayList<String>();
String group;
String people;
while((group = pacsFile.readLine()) != null)
{
acroymn.add(group);
}
Collections.sort(acroymn);
pacsFile.close();
while((membersFile.ready()))
{
ArrayList<String> members = new ArrayList<String>();
people = membersFile.readLine();
String [] peoples = people.split(" ");
members.add(peoples[0]);
for (int i = 1; i< peoples.length; i++)
{
Map.put(peoples[i],peoples[0]);
}
}
membersFile.close();
for(String acro: acroymn)
{
String name = "";
for(String mem: Map.keySet())
{
for(String S: Map.get())
{
if(acro.equals(S))
{
name = name+ " " + mem;
}
}
}
System.out.println(acro + " " + name);
}
} // END MAIN
} // CLASS
答案 0 :(得分:1)
我认为问题在于你是如何存储数据的。最好将它存储起来:
TreeMap<String, List<String>> data = new TreeMap<String, List<String>>();
第一个文件(a,b,c,d)中的元素将成为键,第二个文件(sara,brad,tammy)中的名称将是为地图的每个条目添加的值。 / p>
最后,只需打印没有任何null
值的键值对。
答案 1 :(得分:0)
我在阅读文件中信息的方式上看到了几个问题。
"pacs.txt"
首先,我觉得acronym
列表只包含一个包含所有字母的元素:
while((group = pacsFile.readLine()) != null)
{
acroymn.add(group);
}
如果文件的第一行实际上包含用逗号分隔的所有字母(如您所述),那么这只会向列表中添加一个元素:字符串"a,b,c,d"
。
您应该使用group.split(",")
,然后将其元素添加到列表中。
"members.txt"
其次,似乎你在people
上循环而不访问不同的索引:
for (int i = 0; i< peoples.length; i++)
{
members.add(peoples[0]);
Map.put(acroymn,peoples[0]);
}
您始终可以访问0。
您当前正在将一个文件的内容存储在数据结构中,将另一个文件的内容存储在另一个数据结构中,然后将所有内容放在一起。
你应该在这里关注@LuiggiMendoza的建议,并使用Map<String, List<String>
。直接在流程的两个步骤中使用此结构。
以下是一些关于你可以用它做什么的提示。
"pacs.txt"
使用以下方法将所有元素添加为地图的键:
map.put(element, new LinkedList<String>());
这样,即使没有人关联,您的所有密钥都将存在。此外,这会将人员列表初始化为您只需要完成的空列表。
"members.txt"
对于每个人,使用以下方式获取与该行的每个键对应的列表:
List<String> list = map.get(key);
并将您的人添加到其中:
list.add(person);