3

我想用java程序写一个星算法,我想像这样读取文本文件的距离

    89  R A
    118 A T
    140 M S
    85  B U

正如您在我的文本文件中看到的那样,我有三列,但是使用我编写的这段代码,它只会给我两列,但我想阅读我的所有列,如您在上面看到的三列

List<String> halist = new ArrayList<String>();

File f = new File("mapfile.txt");

FileInputStream fis = new FileInputStream(f);

BufferedInputStream bis = new BufferedInputStream(fis);

dis = new DataInputStream(bis);

while ( (record=dis.readLine()) != null ) {
    Map<Integer, String> hamap = new HashMap<Integer, String>();
    String[] columns = record.split(" ");
    hamap.put(Integer.valueOf(columns[0]), columns[1]);

    for(Map.Entry<Integer,String> m :hamap.entrySet()) {
        System.out.println(m.getKey()+" "+m.getValue());
    }
}
4

2 回答 2

2

你从不使用第三列

hamap.put(Integer.valueOf(columns[0]), columns[1] +" " + columns[2]);

或者您可以使用列表列表:

Map<Integer, List<String>> hamap = new HashMap<Integer, List<String>>();

String[] columns = record.split(" ");
List<String> otherColumns = new ArrayList<String>();

for (int i=1; i < columns.length; i++) {
    otherColumns.add(columns[i]);
}

hamap.put(Integer.valueOf(columns[0]), otherColumns);

for(Map.Entry<Integer,List<String>> m :hamap.entrySet()) {
    System.out.println(m.getKey()+" "+m.getValue());
}
于 2012-12-10T21:40:12.367 回答
0

据我所知,您只将 2 个值放入您的哈希图中。

hamap.put(Integer.valueOf(columns[0]), columns[1]);

现在这里有两种潜在的方法

如果您的整数值是其他 2 个值的键Map<Integer, String>,那么您应该有一个SomeObject包含其他 2 个字符串的 Map ,而不是 a 。

如果整数不是键,

那么你最好使用集合的集合(例如数组列表)来表示你的行,或者你可以有一个SomeObject代表所有 3 个值的列表,并有一个列表SomeObject

所以在这种方法中

Class SomeObject
{
    int theInt;
    string firstString;
    string secondString;

    public SomeObject(/*maybe some params here*/)
    {
         // insert constructor here
    }
}

将代表您的订单项,并且您将拥有这些订单项的集合。

someList.Add(New SomeObject(Integer.valueOf(columns[0]), columns[1], columns[2]));
于 2012-12-10T21:42:34.120 回答