您可以联系我们Map<String,Integer>
在这种情况下,我使用了TreeMap,它将为您排序所有内容。如果您不需要排序,则只需使用HashMap 而不是TreeMap。
Map<String, Integer> map = new TreeMap();
try {
BufferedReader reader = new BufferedReader(new FileReader(new File("C:/iPhone/persons.txt")));
String line = "";
String [] person = new String[2];
while ((line = reader.readLine()) != null) {
person = line.split(" ");
String name = person[0];
int number = Integer.parseInt(person[1]);
map.put(name,map.getOrDefault(name,0)+number);
}
reader.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
map.forEach((k,v)->System.out.println(k + " = " + v));
}
persons.txt:
personx 25
personz 2
persony 5
persony 7
personi 55
personx 25
输出:
personi = 55
personx = 50
persony = 12
personz = 2
1) 我可以在行不是我的格式但它有例如..这种格式的文件上使用它吗? “personx bla bla 25”?也可以转换吗?怎么样?
是的,您可以创建为您执行此操作的方法。您可以使用字符串拆分或一些正则表达式。
2) 为什么会有String[] person = new String[2]; ?
错了,应该是String[1]。现已更正
3) 什么是字符串 line = ""; ?
这只是新的String,我存储从文件中读取的每一行。如您所见,我在 while 循环中分配了reder.readLine()。之后我只是拆分它。
编辑:
更改了代码,因此人可以有多个参数,但只会将名字作为名字,将最后作为数字。
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap();
try {
BufferedReader reader = new BufferedReader(new FileReader(new File("C:/iPhone/persons.txt")));
String line = "";
String [] person;
while ((line = reader.readLine()) != null) {
person = line.split(" ");
String name = person[0];
int number = Integer.parseInt(person[person.length-1]);
map.put(name,map.getOrDefault(name,0)+number);
}
reader.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
map.forEach((k,v)->System.out.println(k + " = " + v));
}
persons.txt:
personx asdasdas dasd asd a 25
personz 2
persony asd asd asd a 5
persony 7
personi 55
personx 25
输出:
personi = 55
personx = 50
persony = 12
personz = 2