从文本文件评估数据

时间:2016-08-10 00:43:15

标签: java arrays file sorting text

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

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循环。

我不认为这是最好的解决方案。你会怎么做?有更好/更快/更容易的东西吗?以及如何解决排序?
感谢您的时间。

1 个答案:

答案 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