2011-01-10 59 views
2

我有一個字符串數組,其中包含從CSV文件中讀取的日期。
現在我想要計數有多少個週末天在那個陣列中。但在我的陣列中有一些日期是重複的。這裏顯示了我的數組中包含的部分數據。計算陣列中的週末天數記錄

2010/12/2
12/3/2010
12/5/2010
12/10/2010
12/5/2010
2010年12月13日
12/14/2010
12/12/2010

在這個數據集12/5/2010是星期天(但有兩個記錄)& 12/12/2010是星期六(有一條記錄)。在輸出中,我想使用java打印此陣列中的週末天數。與此例相比,答案應該是2

FileInputStream fis=new FileInputStream("c:/cdr2.csv"); 
InputStreamReader isr=new InputStreamReader(fis); 
BufferedReader bf = new BufferedReader(isr); 
while (bf.ready()) { 
    String line = bf.readLine(); 
    String[] values=line.split(","); 
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/d/yyyy"); 
    Date date = simpleDateFormat.parse(values[2]); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(date); 
} 
+1

這看起來像一個homeowrk問題向您發送德codez。不要要求我們爲你做這項工作,請嘗試編寫一些代碼並要求我們對此進行評論。 – Raedwald 2011-01-10 14:24:01

回答

3

首先,你需要編寫一個確定的方法如果給定Date是週末或不:

public static boolean isWeekend(Date date) { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); 
    return dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY; 
} 

然後,你需要定義一個DateFormat,這樣就可以分析日期Stringjava.util.Date。最後,你可以使用一個Set,以保證每次都發現週末是不會被複制:

public static void main(String[] args) throws ParseException { 
    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    String[] dates = { "12/2/2010", "12/3/2010", "12/5/2010", "12/10/2010", "12/5/2010", "12/13/2010", "12/14/2010", "12/12/2010" }; 
    Set<String> weekends = new HashSet<String>(); 
    for (String dt : dates) { 
    Date date = dateFormat.parse(dt); 
    if (isWeekend(date)) { 
     weekends.add(dt); 
    } 
    } 
    System.out.println("There are " + weekends.size() + " distinct weekends."); // 2 
} 
1

我會說你需要先刪除重複項,然後檢查哪些是週末:

Set<String> set = new HashSet<String>(Arrays.asList(yourArrayOfDateStrings)); 
DateFormat df = new SimpleDateFormat(yourDatePattern); 
Calendar calendar = Calendar.getInstance(); 
int weekendDays = 0; 
for (String dateString : set) { 
    calendar.setTime(df.parse(dateString)); 
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); 
    if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) { 
     weekendDays++; 
    } 
} 
1

我不使用java的日期,永遠!
我同意Costi Ciudatu,使用Set刪除重複項。

:)請使用JodaTime

import org.joda.time.DateTime; 
import org.joda.time.DateTimeConstants; 
import org.joda.time.DateTimeField; 
import org.joda.time.format.DateTimeFormat; 
import org.joda.time.format.DateTimeFormatter; 

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.HashSet; 
import java.util.Set; 

public class Dates 
{ 
    static String[] localTestDate = new String[] {"12/2/2010", "12/3/2010", "12/5/2010", "12/10/2010", "12/5/2010", "12/13/2010", "12/14/2010", "12/12/2010"}; 

    static DateTimeFormatter dateFactory = DateTimeFormat.forPattern("MM/d/yyyy"); 

    public static void main(String[] args) 
    { 
//  final Set<DateTime> uniqueDates = generateUniqueDates(localTestDate); 

     final Set<DateTime> uniqueDates = generateUniqueDates(readCommonSeparatedFile(args[0])); 


     int numberOfWeekendDates = 0; 
     for(DateTime date : uniqueDates) 
     { 
      if(isWeekend(date)) numberOfWeekendDates++; 
     } 

     System.out.println("There are " + numberOfWeekendDates + " weekend days in your list."); 
    } 

    private static boolean isWeekend(DateTime dateTime) 
    { 
     return (DateTimeConstants.SATURDAY == dateTime.dayOfWeek().get() || DateTimeConstants.SUNDAY == dateTime.dayOfWeek().get()); 
    } 

    private static String[] readCommonSeparatedFile(final String fileName) 
    { 
     FileInputStream fileInputStream = null; 

     String[] result = null; 

     try 
     { 
      fileInputStream = new FileInputStream(fileName); 

      final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream)); 

      while (bufferedReader.ready()) 
      { 
       String line = bufferedReader.readLine(); 

       result = line.split(","); 
      } 
     } 
     catch (IOException e) 
     { 
      //log error some where 

      throw new RuntimeException("aw, snap!"); 
     } 

     return result; 
    } 

    private static Set<DateTime> generateUniqueDates(final String[] dates) 
    { 
     final Set<DateTime> dateTimes = new HashSet<DateTime>(); 

     for (String date : dates) 
     { 
      dateTimes.add(dateFactory.parseDateTime(date).toDateTime()); 
     } 

     return dateTimes; 
    } 
}