我需要一些帮助。我不知道如何解决我的问题。 我有这种格式的文本文件:
personx 25
personz 2
persony 5
persony 7
personi 55
personx 25
我需要计算每个人的数字。输出应为“personx = 50”等
我不能使用旧系统,我知道有10个人。所以我有10个变量,我只是通过扫描仪检查文件并检查行是否以“personx”开头,然后将数字计入变量personx
等。我现在不想使用这些变量。我不想在每个新人之后改变代码
怎么解决这个?我希望将此输出从最高到最低排序:
personi = 55
personx = 50
persony = 12
personz = 2
这是否可以不使用变量
我的想法是浏览文件并扫描名称。将名称保存到数组中,如果该名称不在数组中,则将另一个名称添加到数组中。所以我会有名字 接下来,我将再次扫描文件并检查名称和编号。检查名称+号码,然后将号码保存到与第一个阵列中的名称相同的另一个阵列中。personi
,personx
,persony
,personz
?
Names[0] = "personi";
Count[0] = 55;
Names[1] = "personx";
Count[1] = 50;
然后我将打印这两个数组for循环。
我不认为这是最好的解决方案。你会怎么做?有更好/更快/更容易的东西吗?以及如何解决排序?
感谢您的时间。
答案 0 :(得分:2)
您可以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)我可以在文件中使用它,其中行不是我的格式,但它有例如..这种格式? &#34; personx bla bla 25&#34; ?是否有可能转换它?如何?
是的,你可以创建为你做的方法。您可以使用字符串拆分或一些正则表达式。
2)为什么有String [] person = new String [2]; ?
错误,它应该是String[1]
。现在更正
3)什么是String line =&#34;&#34 ;; ?
它只是新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