如何从自定义文本文件中的记录计算每月的日期数?

时间:2018-01-03 14:05:03

标签: java

我有一个文本文件,其中包含以下格式的记录,

Kernel Object

我需要计算每月的日期并打印如下,

03-Jan-2018 2   1   12  N   MT680N  617 U Cecil

我已尝试如下但无法获得预期结果,我们非常感谢您的指导。

当前代码如下所示:

Jan Feb ...
5    2  ...

忽略以下行,该行用于根据列中的预定义值跳过记录。

public static void displaySummaryofContracts()
{   
    int numberOf3N4Lines = 0;      
    int totalLines = 0;
    String filePath = "test.txt";
    String arr[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
    String space = "   ";

    ArrayList<String> numberOf3N4s= new ArrayList<String>();
    try (BufferedReader bufr = new BufferedReader(new FileReader(filePath))){
        String lineText = null;

        while ((lineText = bufr.readLine()) != null){  
            String[] col = lineText.split("\t");
            if(col[2].equals("3") || col[2].equals("4")){
                numberOf3N4s.add(lineText);
                numberOf3N4Lines++;
            }
            totalLines++;
        }
    }  

    catch (IOException | ArrayIndexOutOfBoundsException ioex){
        System.err.println(ioex); 
    }

    System.out.println("Total Number of Lines: " + totalLines);
    System.out.println("Total Number of Lines equivalent to 3 and 4: " + numberOf3N4s);
    System.out.println("Number of dates connected to each month:");
    System.out.println(arr[0] + space + arr[1] + space + arr[2] + space + arr[3] + space + arr[4] + space + arr[5] +
               space + arr[6] + space + arr[7] + space + arr[8] + space + arr[9] + space + arr[10] + space + arr[11]);
}

2 个答案:

答案 0 :(得分:0)

在声明arr[]时创建另一个数组,以便您可以将信息保存在那里,并在以后arr[]同时输出。 (另外,如果你不知道它的具体尺寸,只需使用一个清单)

所以结果将是

的结果
String arr[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
String secondArray[] = new String[12];
String space = "   ";

在这里,您可以执行操作并将它们添加到数组

String result = xxx
arr[0] = result;

要在所有内容的最后输出它们,首先要显示包含标题的数组arr[],然后再显示包含结果的第二个数组

for(String s : arr) {
  System.out.print(s + " ");
}

System.out.println();

for(String s : secondArray) {
  System.out.print(s + " ");
}

这将打印

Jan Feb Mar [...]
10 14 11 [...]

要使打印工作,您必须使用print(),而不是打印 ln ()。此外,如果您希望它格式良好,您可以使用printf而不是print()。有了它你就可以这样做

Jan Feb Mar [...]
10  14  11  [...]

答案 1 :(得分:0)

您可以尝试使用变量name和counter创建一个对象Month。 在构造函数中设置名称:

const schedule = (fn, seconds, runNow = false) => {
  Meteor.setTimeout(() => {
    try {          
      Promise.resolve(fn()).then(()=>{
        schedule(fn, seconds, false)
      }).catch((err)=>{
        log.error(err)
        schedule(fn, seconds, false)
      })
    } catch (e) {
      log.error(e);
    }
  }, runNow ? 0 : seconds * 1000);
};

在主类中创建一个方法:

public string name;
public int counter;
public Month(string name){this.name = name;counter = 0;}

然后创建一个全局对象数组,如:

public void addMonth(String month) {
Month m = new Month(month);
    monthList.add(m);
}

然后在你的主要:

List<Month> monthList = new ArrayList<Month>();

剩下的就是检查月份(从文本文件行获得的月份)是否等于month.name

 String arr[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

for(String s: arr)
{ 
    addMonth(s);
}

如果要输出

for(Mont m: monthList)
{ 
if(month == m.name)
{
m.counter++;
} 
}

确切的间距我不知道,但我认为你可以解决这个问题。