Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    33

    Usare il campo data con substring

    Ciao a tutti!
    Dovrei creare un campo data del tipo: gg-mm-aaaa senza usare la classe GregorianCalendar,ma solo con i metodi che manipolano le stringhe.
    Voglio che l'utente al terzo e sesto carattere della stringa data,deve mettere un trattino " - ",se non lo mette da errore.
    E in più vorrei un controllo sui singoli numeri.
    Non riesco a capire come si effettua la disuguaglianza tra le stringhe.

    Spero possiate aiutarmi.Grazie!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Usare il campo data con substring

    Originariamente inviato da z0rk
    Dovrei creare un campo data del tipo: gg-mm-aaaa senza usare la classe GregorianCalendar,ma solo con i metodi che manipolano le stringhe.
    Voglio che l'utente al terzo e sesto carattere della stringa data,deve mettere un trattino " - ",se non lo mette da errore.
    Iniziamo a delineare meglio il problema! Vuoi semplicemente "validare" (e eventualmente anche convertire in Calendar o altro) un String in quel formato? O vuoi gestire un componente grafico che accetta solo input in quel formato? O altro?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    33
    Molto semplicemente l'utente deve immettere una stringa di 10 caratteri:"gg-mm-aaaa".Infatti ho effettuato questo controllo sulla lunghezza e sull'assenza di input:

    codice:
    String data = in.nextLine();
    		while (data.equals("") || (data.length() != 10)){
    			System.out.println("Inserire la data nel seguente formato: gg-mm-aaaa");
    			data = in.nextLine().trim();
    					}
    Ora devo aggiungere la condizione che,se l'utente al terzo e sesto carattere NON DIGITA il trattino,da sempre un messaggio d'errore.
    Dopo aver fatto ciò voglio aggiungere un'utlima condizione,che controlla che tutti i caratteri digitati siano dei numeri(tranne il terzo e sesto).

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da z0rk
    Ora devo aggiungere la condizione che,se l'utente al terzo e sesto carattere NON DIGITA il trattino,da sempre un messaggio d'errore.
    Dopo aver fatto ciò voglio aggiungere un'utlima condizione,che controlla che tutti i caratteri digitati siano dei numeri(tranne il terzo e sesto).
    Dal momento che suppongo che tu non possa usare espressioni regolari o altro, ti suggerisco di fare un semplice metodo che si occupa della validazione della stringa e che restituisce true/false. Chiaramente dovrai controllare tu carattere per carattere che sia quello che ti aspetti. Usa charAt() per prendere i singoli caratteri. Poi a quel punto fai dei banalissimi test.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    33
    Originariamente inviato da andbin
    Dal momento che suppongo che tu non possa usare espressioni regolari o altro, ti suggerisco di fare un semplice metodo che si occupa della validazione della stringa e che restituisce true/false. Chiaramente dovrai controllare tu carattere per carattere che sia quello che ti aspetti. Usa charAt() per prendere i singoli caratteri. Poi a quel punto fai dei banalissimi test.
    Il problema è che non so come fare la disuguaglianza con charAt.
    Ho provato a fare data.charAt(2) != "-" e mi dava errore.
    Come mai?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da z0rk
    Il problema è che non so come fare la disuguaglianza con charAt.
    Ho provato a fare data.charAt(2) != "-" e mi dava errore.
    Come mai?
    Perché stai confrontando un carattere con "-" che è una stringa.

    Non mi sembra difficile: per prima cosa controlli la lunghezza della stringa, se non è 10, è già sbagliata. Poi fai un ciclo for da i=0 per i<10. Se l'indice è 2 o 5, il carattere deve essere un '-' altrimenti deve essere un digit nel range '0' ... '9'. Se non è così, è sbagliata.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    33
    Originariamente inviato da andbin
    Perché stai confrontando un carattere con "-" che è una stringa.

    Non mi sembra difficile: per prima cosa controlli la lunghezza della stringa, se non è 10, è già sbagliata. Poi fai un ciclo for da i=0 per i<10. Se l'indice è 2 o 5, il carattere deve essere un '-' altrimenti deve essere un digit nel range '0' ... '9'. Se non è così, è sbagliata.
    Ho risolto tutti i problemi tranne il digit.

    Non ho capito che metodi usare e come far capire che determinate lettere devono essere numeri.



    Il codice attuale è:
    codice:
    String data = in.nextLine();
    		while (data.equals("") || (data.length() != 10) || ! (data.substring(2, 3).equals("-")) 
    				|| ! (data.substring(5, 6).equals("-")) ) 
    		{
    			System.out.println("Inserire la data nel seguente formato: gg-mm-aaaa");
    			data = in.nextLine().trim();
    		}
    E ora?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,323
    I caratteri (char) sono dei tipi primitivi. Essi si identificano usando gli apici singoli e non le virgolette:
    codice:
    if (tuaStringa.gatAt(2) != '-') {   // <-- Nota gli apici singoli attorno al trattino
       // errore
    }
    Queste cose dovrebbero essere scritte a pagina 2 di un qualunque libro di Java.

    Essendo dei tipi primitivi, essi sono visti anche come numeri e possono essere utilizzati per confronti come questo:
    codice:
    if ((tuaStringa.charAt(1) >= '0') && (tuaStringa.charAt(1) <= '9')) {
       // Ok... è una cifra.
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Si potrebbe fare con un semplice metodo come questo:

    codice:
    public static boolean dataValida (String s)
    {
        if (s.length () != 10)
            return false;
    
        for (int i = 0; i < 10; i++)
        {
            char ch = s.charAt (i);
    
            if (i == 2 || i == 5 ? ch != '-' : ch < '0' || ch > '9')
                return false;
        }
    
        return true;
    }
    In genere è abbastanza inusuale (e personalmente non mi capita quasi mai) usare l'operatore condizionale ?: dentro la condizione di un if ma in questo caso come si dice "cade a fagiolo".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.