2011-01-10 5 views
2

У меня есть String Array, который содержит даты, которые читаются из файла CSV.
Теперь я хочу считать , сколько дней в выходные дни находятся в этом массиве. Но в моем массиве повторяются несколько дат. Здесь показана часть данных, содержащихся в моем массиве.Рассчитать количество записей дней выходных дней в массиве

12/2/2010
12/3/2010
12/5/2010
12/10/2010
12/5/2010
12/13/2010
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 вопрос. Вместо того, чтобы просить нас выполнить эту работу за вас, попробуйте написать код и попросить нас критиковать его. – Raedwald

+2

Вместо 'Array', помещаем их в цикл« Set »и печатаем дни недели. 'Set' не позволяют дублировать записи. –

+0

i hav вставить мой код Java здесь ..... – Chamal

ответ

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, так что вы можете разобрать дату String в java.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, используйте набор, чтобы удалить дубликаты.

:), пожалуйста, чтобы отправить вам с помощью codez дэ 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; 
    } 
} 
Смежные вопросы