我正在通过扫描仪从.txt文件访问数据,该.txt文件如下所示:

001 City     5000.00 101
002 Capital  4000.00 101
003 Farm     1000.00 102

我需要这样重新格式化:

Capital
City
Farm

101 9000.00
102 1000.00

我的代码到目前为止:

try{
      Scanner scan = new Scanner(new File("C:\\Users\\Dustin\\Desktop\\test.txt"));
      String[] strArray = new String[3];
      TreeSet<String> ts = new TreeSet<String>(); 
      while(scan.hasNextLine()){
          ts.add(scan.nextLine());
          //strArray[0] = scan.nextLine();
          //StringTokenizer stkn = new StringTokenizer(strArray[0],",");
          //System.out.println(stkn.nextElement());
          //System.out.println(strArray[0]);
      }
      for(String s : ts){
      System.out.println(s);
      }catch(Exception e){
       System.out.println("Error: "+e.getMessage());
}

但是我不知道如何访问此数据的各个项目并添加到集合中,然后将这些101个项目加在一起。 我对此很陌生,任何帮助将不胜感激。

===============>>#1 票数:1 已采纳

您可以尝试执行以下操作:

从文本文件中读取数据,然后使用.split(String regex)方法将其拆分:

try{
      Scanner scan = new Scanner(new File("C:\\Users\\Dustin\\Desktop\\test.txt"));
      TreeSet<String> ts = new TreeSet<String>();
      while(scan.hasNextLine()){
          String[] strArray = scan.nextLine().split("\\s+");    //the will yield an array having {"001", "City", "5000.00", "101"}

由于HashMap ID分组,因此可以查看HashMap并添加以下行: Map<String, Double> map = new HashMap<String, Double>();

TreeSet<String> ts = new TreeSet<String>();
Map<String, Double> map = new HashMap<String, Double>()

从文件读取数据时,将检查是否已读取具有相同ID的值:

if(map.containsKey(strArray[3]))
{
    map.put(strArray[3], map.get(strArray[3]) + Double.parseDouble(strArray[2].trim()));
}
else
{
    map.put(strArray[3], Double.parseDouble(strArray[2].trim());
}

并将数据添加到您的集合中:

ts.add(strArray[1]);

准备就绪后,您将需要遍历集合,然后打印其内容。 完成后,您将需要遍历地图并打印键值对。

话虽这么说,由于两种数据结构都不适合排序,因此为了清楚起见,我建议您将放入树集中的值的ID包括在内:

ts.add(strArray[1] + "(" + strArray[4] + ")");

===============>>#2 票数:0

对于您的情况,首先读取文件的每一行,然后将其传递到一个对象(我称为MyRecord)中:

Scanner scan = new Scanner(new File("C:\\test.txt"));
              TreeSet<String> ts = new TreeSet<String>(); 
              while(scan.hasNextLine()){
                  ts.add(scan.nextLine());
              }
              ArrayList<MyRecord> records = new ArrayList<MyRecord>();
              for(String s : ts){
                  System.out.println(s);
                  StringTokenizer st = new StringTokenizer(s," ");
                      MyRecord record = new MyRecord();
                      record.setOrder(st.nextElement().toString());//001 
                      record.setName(st.nextElement().toString());//City
                      record.setNumber(st.nextElement().toString());//5000.00
                      record.setGroup(st.nextElement().toString());//101
                      System.out.println(record.toString());
                      records.add(record);
              }

之后,您将拥有一个包含许多MyRecord的ArrayList,每个MyRecord是文件中的一行
在这个ArrayList中循环,您就可以满足您的要求。
剩下的事要靠你自己做。 如果有问题->评论<-我会支持。

class MyRecord{
    String order, name, group, number;
    //when calculate number, you need to convert number to number type such as long, double, etc
    public String getOrder() {
        return order;
    }
    public void setOrder(String order) {
        this.order = order;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGroup() {
        return group;
    }
    public void setGroup(String group) {
        this.group = group;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "order: " + order + "| name:" + name + "| number:" + number +"| group" + group;
    }

}

  ask by hexobolic translate from so

未解决问题?本站智能推荐: