2011-01-10 5 views
2

Ich habe ein String-Array, das Daten enthält, die aus einer CSV-Datei lesen.
Jetzt möchte ich zählen, wie viele Wochenendtage in diesem Array sind. Aber in meinem Array sind einige Daten doppelt vorhanden. Hier wird ein Teil der Daten angezeigt, die in meinem Array enthalten sind.Berechnen Sie die Anzahl der Wochenendtage Datensätze im Array

12/2/2010
12/3/2010
12/5/2010
12/10/2010
12/5/2010
12/13/2010
12/14/2010
12/12/2010

In diesem Datensatz 2010.12.05 Sonntag ist (aber es gibt zwei Datensätze) & 12.12.2010 ist Samstag (hat einen Datensatz). Bei der Ausgabe möchte ich die Anzahl der Wochenendtage in diesem Array unter Verwendung von java drucken. Im Vergleich zu diesem Beispiel sollte die Antwort 2 sein.

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

Dies sieht aus wie eine homeowrk Frage zu senden. Anstatt uns zu bitten, die Arbeit für Sie zu tun, versuchen Sie bitte, etwas Code zu schreiben und bitten Sie uns, es zu kritisieren. – Raedwald

+2

Anstelle eines 'Array', legen Sie sie in ein' Set', dann Schleife und drucken Sie die Wochentage. 'Set's erlauben keine doppelten Einträge. –

+0

Ich habe meinen Java-Code hier eingefügt ..... – Chamal

Antwort

3

Zuerst müssen Sie eine Methode schreiben, die eine gegebene Date bestimmt, ob ein Wochenende oder nicht:

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; 
} 

Dann benötigen Sie einen DateFormat definieren, so dass Sie String in eine java.util.Date ein Datum analysieren kann. Schließlich können Sie eine Set verwenden jedes Wochenende Ihnen zu versichern, finden nicht dupliziert gehen zu:

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

Ich würde sagen, Sie müssen zuerst Duplikate entfernen, und dann zu überprüfen, welche von ihnen sind Wochenendtage:

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

ich java Datum nicht verwenden, das es gibt!
Ich stimme zu Costi Ciudatu, verwenden Sie ein Set, um Duplikate zu entfernen.

:) bitte Sie teh codez mit 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; 
    } 
} 
Verwandte Themen