我有一个具有以下结构的汽车文本文件: 21 沃克斯豪尔 科萨 红色
19
Vauxhall
Corsa
blue
18
Vauxhall
Corsa
White
我可以将它加载到HashMap中,但是当我加载它时,它会将每个新行索引为一个新元素。如何在每4行之后改变它,它会编入索引? 有没有办法让我可以加载到以下元素中:
id
Manufacturer
carMake
carColour
答案 0 :(得分:0)
希望这是你想要的......
public static void main(String[] args) throws IOException {
Map<Integer, String> map = new HashMap<Integer, String>();
BufferedReader reader = new BufferedReader(new FileReader("/home/Desktop/cars.txt"));
String line = "";
int i = 0;
while (line != null) {
String data = "";
for (int k = 0; k < 4; k++) {
data = data + "," + reader.readLine();
if (k == 3)
map.put(i, data);
}
line = reader.readLine();
i++;
}
System.out.println(map);
}
答案 1 :(得分:0)
您应该为Car
创建一个新的POJO类,然后填充从该POJO中的文本文件中读取的数据。
此外,我没有看到任何HashMap
的使用,因为您只是将增加的计数器添加为键。您可以改为使用HashSet
。
以下是代码段
public class Car {
private int id;
private String manufacturer;
private String carMake;
private String carColour;
/* Getter Setters */
}
主类:
Set<Car> set= new HashSet<>();
BufferedReader reader = new BufferedReader(new FileReader("cars.txt"));
String line = "";
while (line != null) {
Car car = new Car();
line = reader.readLine();
car.setId(line != null ? reader.readLine() : 0);
line = reader.readLine();
car.setManufacturer(line != null ? reader.readLine() : null);
line = reader.readLine();
car.setCarMake(line != null ? reader.readLine() : null);
line = reader.readLine();
car.setCarColour(line != null ? reader.readLine() : null);
set.add(car);
}
答案 2 :(得分:0)
如果您不想使用这四个元素创建Car
对象,则可以使用Map
和Integer
的{{1}}来执行此操作。
List<String>
答案 3 :(得分:0)
你写的内容会将每一行视为同一个字符串作为字符串,因此,您将它放在地图中。 Java是OOP,因此使用它,创建一个对象,为汽车字符串组中的每一行放置4个变量,然后使用这些对象的HashMap。像:
public class Car {
private int id;
private String something;
private String type;
private String collor;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSomething() {
return something;
}
public void setSomething(String something) {
this.something = something;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCollor() {
return collor;
}
public void setCollor(String collor) {
this.collor = collor;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Car car = (Car) o;
return id == car.id;
}
@Override
public int hashCode() {
return id;
}
@Override
public String toString() {
return "Car{" +
"id=" + id +
", something='" + something + '\'' +
", type='" + type + '\'' +
", collor='" + collor + '\'' +
'}';
}
}
确保在这些对象中有toString,hashCode和equals方法,它们非常重要!
答案 4 :(得分:0)
创建一个Car
bean并给它一个构造函数来构建读取文件行的对象。
创建后,Car
会将自己添加到地图中。
static class Car{
String id;
String Manufacturer;
String carMake;
String carColour;
public Car(BufferedReader reader, Map<Integer, Car> map) throws Exception{
id = readLine(reader);
Manufacturer = readLine(reader);
carMake = readLine(reader);
carColour = readLine(reader);
map.put(map.size(), this);
}
private String readLine(BufferedReader reader) throws Exception{
String s = reader.readLine();
if(s == null){
throw new Exception("No more line...");
}
return s;
}
}
public static void main(String[] args) {
try{
Map<Integer, Car> map = new HashMap<Integer, Car>();
BufferedReader reader = new BufferedReader(new FileReader("cars.txt"));
try{
while (true) {
new Car(reader, map);
}
}catch(Exception e){
// Will be thrown at the end ov the file
}
for(int j=0;j<map.size();j++){
System.out.println(map.get(j));
}
System.out.println(map);
}catch(Exception e){
e.printStackTrace();
}
}
答案 5 :(得分:0)
首先,你应该明白你在做什么。
这个循环用于读取文件,读取每一行并放入索引i下的地图中(它不关心实际得到的内容)。
while (line != null) {
line = reader.readLine();
map.put(i,line);
i++;
}
因此,为了您的目的,您需要辨别您在该循环中除了哪些数据。
{
id = reader.readLine();
Manufacturer = reader.readLine();
carMake = reader.readLine();
carColour = reader.readLine();
reader.readLine(); //empty space between data
...
}
当然最好检查一下你是否收到任何数据,比如将它放入if语句中。
您的下一步应该是决定如何存储该数据。有很多方法可以做到这一点。例如,您也可以使用另一个hashMap
Map<Integer, Map<String>> map = new HashMap<>();
...
{
...
Map<String, String> car = new HashMap<>();
car.put("id", id);
car.put("manufacturer", manufacturer);
car.put("model", carMake);
car.put("color", carColor);
map.put(i, car);
}
编辑: 几乎忘了,因为你的文件在每个汽车数据之间有空格,所以需要读取该空行并忽略它