Java 文本文件中的数据求值

Java 文本文件中的数据求值,java,arrays,file,sorting,text,Java,Arrays,File,Sorting,Text,我需要一些帮助。我不知道如何解决我的问题。 我有以下格式的文本文件: personx 25 personz 2 persony 5 persony 7 personi 55 personx 25 我需要计算每个人的人数。输出应为“personx=50”等 我不能使用我知道有10个人的旧系统。所以我有10个变量,我只是用扫描器检查了文件,检查行是否以“personx”开头,然后计算变量personx等的数字。我现在不想使用这些变量。我不想在每个新人之后更改代码。 如何解决这个问题

我需要一些帮助。我不知道如何解决我的问题。 我有以下格式的文本文件:

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 cycle打印这两个数组

我不认为这是最好的解决办法。你会怎么做?有更好/更快/更容易的吗?如何解决排序问题?
谢谢你抽出时间

你可以给我们
Map

在本例中,我使用了
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));

}
输出:

personi = 55
personx = 50
persony = 12
personz = 2
1) 如果行不是我的格式,但它有,我可以在文件中使用它吗,例如。。这种格式?“人肉布拉布拉25”?也可以转换吗?怎么做

是的,你可以创建一个方法,它将为你做这件事。您可以使用字符串拆分或某些正则表达式

2) 为什么有字符串[]person=新字符串[2]

错误,它应该是
字符串[1]
。现在更正

3) 什么是字符串=”

它只是一个新的
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));
        }
输出:

personi = 55
personx = 50
persony = 12
personz = 2

使用
地图
您好,谢谢回复!这帮了大忙!:)我没有什么烦恼。。1) 如果行不是我的格式,但它有,我可以在文件中使用它吗,例如。。这种格式?“人肉布拉布拉25”?也可以转换吗?怎样?2) 为什么有字符串[]person=新字符串[2]?为什么不字符串[]person=新字符串[1]?3) 什么是字符串行=”;?:)@Kym答案已编辑,请现在查看。让我知道,例如,如果输入是“personx bla bla 25”,那么应该输出什么?“personx 25”或“personx bla bla 25”?谢谢您的回答!:)输出应为“personx 25”,并使我的问题更具体如何通过编辑的文本输入“personx bla bla 25”实现相同的输出。您现在可以尝试:)
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