从文本文件进行数据评估



我需要一些帮助。我不知道如何解决我的问题。我有这样一个文本文件:

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 ?
My idea was to go through the file and scan the names. Save the name into an array and add another name into an array if that name is not in the array yet. So I will have the names.
Next I will scan the file again and check for the name and number. Check name + number and then save the number into another array on the same possition as the name in the first array. So I will have

Names[0] = "personi";
Count[0] = 55;
Names[1] = "personx";
Count[1] = 50;

然后我将用for循环打印这两个数组。

我认为这不是最好的解决办法。你会怎么做?有没有更好/更快/更容易的办法?如何解决这个排序呢?
谢谢你的宝贵时间。

您可以使用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)我可以在行不是我的格式的文件上使用这个,但它有例如…这种格式?" 25人" ?也可以转换吗?如何?

是的,你可以创建一个方法来帮你完成。您可以使用字符串拆分或一些正则表达式。

2)为什么有String[] person = new String[2];?

错误,应该是String[1]。纠正现在

3)什么是字符串line = ";?

这只是新的String,我存储我从文件中读取的每一行。正如你所看到的,我在while循环中赋值reder.readLine()。之后我就把它分开了。

编辑:修改了代码,使person可以有多个参数,但将只以first作为名称,last作为编号。

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

相关内容

  • 没有找到相关文章

最新更新