2016-04-24 1 views
0

Ainsi, le programme est supposé prendre une date au format "aaaa/jj/mm". Après chaque date, il y a du texte disponible pour être entré. Par exemple, "1776/7/4 Premier Jour de l'Indépendance". Je voulais utiliser un tokenizer String et diviser la date sur les barres obliques mais ensuite je suis confus sur la façon de le diviser sur l'espace après cela. Une fois que je les ai séparés, je peux alors comparer les dates avec d'autres dates correctes?Division des dates saisies par l'utilisateur en Java

Scanner sc = new Scanner(System.in); 
    System.out.print("Enter the first date: "); 
    String firstDate = sc.nextLine(); 
    //System.out.print("Enter the second date: "); 
    //String secondDate = sc.nextLine(); 
    //System.out.println(); 
    //StringTokenizer date = new StringTokenizer(firstDate, "/",false); 
    //StringTokenizer space = new StringTokenizer(firstDate, " ",false); 
    //if (firstDate.equals(secondDate)) 
    //{ 
    // System.out.println (
     //   "There are 0 year(s), 0 month(s) and 0 day(s) between dates"); 
    //} 
    int firstSpace = firstDate.indexOf(' '); 

    String event = firstDate.substring(firstSpace + 1); // "First Independence Day" 

    String date = firstDate.substring(0, firstSpace); // "1776/7/4" 

    // split on '/' 
    String dateParts[] = date.split("/"); 
    String dateParts1[] = date.split("/"); 
    String dateParts2[]= date.split("/"); 
    if(dateParts1[1].length() != 2) 
     dateParts1[1] = "0" + dateParts1[1]; 

    // add 0 to front of day 
    if(dateParts1[2].length() != 2) 
     dateParts1[2] = "0" + dateParts1[2]; 

    // do the same for the second date 
    if(dateParts2[1].length() != 2) 
     dateParts2[1] = "0" + dateParts2[1]; 

    // convert array to string 
    String date1 = String.join("/", dateParts1); 
    String date2 = String.join("/", dateParts2); 

    // set up the format that you have 
    SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy/MM/dd"); 

    Date d1 = dateFormat.parse(date1); 
    Date d2 = dateFormat.parse(date2); 

    // equal dates 
    if(d1.equals(d2)) { 
     // There or 0 days, months and years between dates. 
    } 

Répondre

-1

il suffit d'utiliser splite comme ces données de chaîne

;

string [] parties;

parts = data.splite ('');

+1

vous auriez pu écrire 'split' correctement –

0
String x = "yyyy/dd/mm"; 
String[] split = x.split("/"); 
for (String s : split) { 
    System.out.println(s); 
} 


Output: 
yyyy 
dd 
mm 
0

Je pense que ce serait une bonne idée d'obtenir l'indice du premier caractère d'espace.

String text = "1776/7/4 First Independence Day"; 
        ^

int firstSpace = text.indexOf(' '); 

String event = text.substring(firstSpace + 1); // "First Independence Day" 

String date = text.substring(0, firstSpace); // "1776/7/4" 

// split on '/' 
String dateParts[] = date.split("/"); 

Cela fonctionne tout assurer même si le nom de l'événement contient une /.

Modifier.

Pour comparer les dates, vous devez d'abord vous assurer que des mois tels que April ont une valeur de 04 et non de 4. Supposons que vous avez 2 tableaux, dateParts1 et dateParts2.

// add 0 to front of month 
if(dateParts1[1].length() != 2) 
    dateParts1[1] = "0" + dateParts1[1]; 

// add 0 to front of day 
if(dateParts1[2].length() != 2) 
    dateParts1[2] = "0" + dateParts1[2]; 

// do the same for the second date; 

// convert array to string 
String date1 = String.join("/", dateParts1); 
String date2 = String.join("/", dateParts2); 

// set up the format that you have 
SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy/MM/dd"); 

Date d1 = dateFormat.parse(date1); 
Date d2 = dateFormat.parse(date2); 

// equal dates 
if(d1.equals(d2)) { 
    // do something 
} 

if(date2.after(date1)) 
    return true; 
else 
    return false; 

Edit 2.

String firstDate = "1776/7/4 First Independence Day"; 

int firstSpace = firstDate.indexOf(' '); 

String event = firstDate.substring(firstSpace + 1); // "First Independence Day" 

String date = firstDate.substring(0, firstSpace); // "1776/7/4" 

String dateParts1[] = date.split("/"); 
String dateParts2[] = date.split("/"); 

// add 0 to front of month 
if (dateParts1[1].length() != 2) 
    dateParts1[1] = "0" + dateParts1[1]; 

// add 0 to front of day 
if (dateParts1[2].length() != 2) 
    dateParts1[2] = "0" + dateParts1[2]; 

// do the same for the second date 
if (dateParts2[1].length() != 2) 
    dateParts2[1] = "0" + dateParts2[1]; 

// add 0 to front of day 
if (dateParts2[2].length() != 2) 
    dateParts2[2] = "0" + dateParts2[2]; 

// convert array to string 
String date1 = String.join("/", dateParts1); 
String date2 = String.join("/", dateParts2); 

// set up the format that you have 
java.text.SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 

java.util.Date d1 = dateFormat.parse(date1); 
java.util.Date d2 = dateFormat.parse(date2); 

if (d1.equals(d2)) 
    System.out.println("equal"); 
+0

@DesbosmitRay Merci, donc j'imprime la date à partir de ça et ça me donne juste la date. Cependant, quelle est la logique derrière la comparaison de l'année, du mois et du jour à une autre date? –

+0

@JohnDoe Premièrement, comparez par année. Si la même année, comparez par mois. Si la même année et le même mois, comparez par date. Pour comparer les valeurs, vous pouvez utiliser '[chaîne1] .compareTo ([chaîne2])'. Est ce que ça aide? –

+0

@DesbosmitRay Oui, je comprends cette partie. Je suppose que je suis confus sur la façon de juste extraire l'année une fois qu'il est divisé –

0

Je recommande l'expression régulière et DateFormat ...

String input = "1776/07/04 First Independence Day"; 
Pattern pattern = Pattern.compile("(\\d+/\\d+/\\d+)\\s+(.*)"); 
Matcher matcher = pattern.matcher(input); 
if (matcher.find()) { 
    DateFormat format = new SimpleDateFormat("yyyy/M/d"); 
    Date date = format.parse(matcher.group(1)); 
    System.out.println(date + " " + matcher.group(2)); 
} 
0

Je ne comprends pas bien votre question. Vous pouvez simplement prendre le premier jeton qui date et l'enregistrer dans une nouvelle chaîne, puis vous pouvez simplement le comparer en utilisant string.compareTo (une autre chaîne); ou vous pouvez prendre l'année, le mois et le jour en entiers en utilisant simplement la méthode scanner.nextInt(): puis comparez-les! J'espère que j'ai aidé.

+0

Ceci n'est pas une réponse. «Je ne comprends pas très bien votre question» La section des commentaires est utilisée pour demander des éclaircissements. –