Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di gogu
    Registrato dal
    Jun 2008
    Messaggi
    169

    [netbeans] accettare solo lettere

    ciao a tutti. sono principiante nel mondo di JAVA. uso netbeans 6.5 . voglio creare un programma che controlla la validità di un codice IBAN-international bank account number.
    io ho fatto una piccola parte del programma ,ma ho incontrato un problema:
    -il utente deve inserire il suo nome,che deve essere composto solo di lettere e non altro: come facci a fare tipo un "filtro" per poter essere inserite(accettate) solo lettere,e se inserisce altro li da errore.?

    vi ringrazio
    Is 'aint over 'till is over"

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

    Re: [netbeans] accettare solo lettere

    Originariamente inviato da gogu
    deve inserire il suo nome,che deve essere composto solo di lettere e non altro: come facci a fare tipo un "filtro" per poter essere inserite(accettate) solo lettere,e se inserisce altro li da errore.?
    Innanzitutto l'input lo fai da "console" o da un componente grafico (es. JTextField)??

    Comunque, a parte la provenienza dell'input, se hai un String di cui controllare il formato le soluzioni sono sempre principalmente 2:
    a) Controllo carattere per carattere con del tuo codice specifico (con ciclo for, charAt(), metodi di Character, ecc...) ... insomma "fai-da-te".
    oppure
    b) Utilizzo delle espressioni regolari.
    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 L'avatar di gogu
    Registrato dal
    Jun 2008
    Messaggi
    169
    l'input viene fatto da un componente grafico (JTextField) ,scusa che nn avevo detto. hai qualche sugerimento darmi.io ho fatto questo:

    Paese xx (2 lettere)
    Cin Europa xx (2 numeri/lettere)
    Cin x (1 lettera)
    ABI xxxxx (5 numeri )
    CAB xxxxx (5 numeri)
    Conto Corrente xxxxxxxxxxxx (12 numeri/lettere)
    Nome xxxx (x lettere)
    Cognome xxxxxx (x lettere)

    quindi per numeri tutto fatto,codice fatto a mano:

    String n1=paese.getText();
    String n2=cine.getText();
    String n3=cin.getText();
    String n4=abi.getText();
    String n5=cab.getText();
    String n6=cor.getText();
    String n7=nome.getText();
    String n8=cognome.getText();


    //inizio
    int t1=n1.length();
    int t2=n2.length();
    int t3=n3.length();
    int t4=n4.length();
    int t5=n5.length();
    int t6=n6.length();

    if(t4==5 && t5==5 && t6==12){
    risult.setText("Ok");

    }else{risult.setText("Uno o più errori");

    }

    fino qua tutto bene,per il resto mi sono bloccato
    Is 'aint over 'till is over"

  4. #4
    Per impedire di inserire caratteri diversi da lettere devi definire un tuo PlainDocument personalizzato, ridefinendo il metodo insertString

    Codice PHP:
    public class OnlyLettersDocument extends PlainDocument{
         public 
    void insertString(int offsetString sAttributeSet as) throws BadLocationException{

              
    //Controllo se ci sono solo lettere
              
    boolean ok true;
              for (
    int i 0s.length(); ++i){
                   
    char c s.charAt(i);
                   if (!
    Character.isLetter(c)){
                        
    ok false;
                        break;
                   }
              }

              if (
    ok)
                   
    super.insertString(offsets, as);
              else
                   
    Toolkit.getDefaultToolkit().beep();
         }


    ...


    tuoJTextField.setDocument(new OnlyLettersDocument()); 
    Ma visto che cmq hai anche altri campi con formati ben precisi ti consiglio di guardare il componente JFormattedTextField
    Al mio segnale... scatenate l'inferno!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ripeto che le soluzioni sono in genere due: "fai-da-te" o uso delle "espressioni regolari". A meno, ovviamente, che si voglia usare qualche altra libreria di terze parti che faccia già queste cose!!

    Esempio: verifica che una stringa sia lunga 5 caratteri e siano tutti digit.

    1) Soluzione "fai-da-te".
    codice:
    public static boolean allDigits(String str, int len) {
        if (str.length() != len) {
            return false;
        }
    
        for (int i = 0; i < len; i++) {
            char ch = str.charAt(i);
            if (!Character.isDigit(ch)) {
                return false;
            }
        }
    
        return true;
    }
    Poi fare: boolean corrisponde = allDigits(tuaStringa, 5);


    2) Espressioni regolari.
    codice:
    boolean corrisponde = tuaStringa.matches("\\d{5}");
    Vedi la differenza tra il "fai-da-te" e le espressioni regolari???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di gogu
    Registrato dal
    Jun 2008
    Messaggi
    169
    ok,adesso faccio una prova poi metto il risultato (scusate,ma sono beginner)
    grazie moltissimo
    Is 'aint over 'till is over"

  7. #7
    Utente di HTML.it L'avatar di gogu
    Registrato dal
    Jun 2008
    Messaggi
    169

    Vedi la differenza tra il "fai-da-te" e le espressioni regolari???

    hmmm,poco... non riesco a capire come devo usare il codice.allora,io devo modifficare il ActionListner del mio bottone (bottone verifica) .il codice che "deve rispondere" alla mia chiamata lo devo scrivere dentro (a meno che nn faccio 1 altra clase ,dopo chiamarla... ) .ma io non ci riesco
    vedo che la soluzione "fai-da-te" non è anche la mia. mi rimane l'altra ,delle "espressioni regolari",che spero sia + facile.

    allora,ho 8 JTextField di cui
    -4 dove si possono inserire solo lettere
    -2 con numeri & lettere
    -2 per solo numeri

    per quelli con numeri & lettere e quelli con solo numeri tutto aposto (io devo controllare che non superano una certa lunghezza) però per quelli con solo lettere mi sembra difficile capire come faccio a controlarli..
    vi ringrazierei se mi aiutaste





    grazie
    Is 'aint over 'till is over"

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gogu
    il codice che "deve rispondere" alla mia chiamata lo devo scrivere dentro (a meno che nn faccio 1 altra clase ,dopo chiamarla... )
    Ammesso di voler usare la soluzione "fai-da-te" come la mia, quale è il problema/difficoltà nel mettere quel metodo statico nella tua classe? O fare una classe separata es. Utility che contiene tale metodo statico??
    Mentre invece usando matches() è ancora più semplice ....

    Insomma ... quale è il dubbio?

    codice:
    public void actionPerformed(ActionEvent e) {
        String txt1 = textField1.getText();
        if (!txt1.matches("....")) {
            ...fai qualcosa...
        }
    
        String txt2 = textField2.getText();
        if (!txt2.matches("....")) {
            ...fai qualcosa...
        }
      ....
    }
    O meglio ancora, magari, spostare tutta questa logica di controllo in un metodo apposito e semplicemente invocarlo dal actionPerformed().

    Insomma ... sono solo questioni di "design".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di gogu
    Registrato dal
    Jun 2008
    Messaggi
    169
    [QUOTEMentre invece usando matches() è ancora più semplice ....[/QUOTE]

    se uso il metodo .matches() cosa ci deve essere tra parentesi ?

    io ho fatto cosi :

    if(!n1.matches("{2}")){
    risult.setText("ok");

    }else{
    risult.setText("error");
    }

    dove n1= primo JTextField


    quindi io voglio che n1 sia esattamente lungo 2 lettere (non altro) ma non va mica beneee
    :master:
    cosa sbaglio ?

    grazie ancora 10 mila volte
    Is 'aint over 'till is over"

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gogu
    se uso il metodo .matches() cosa ci deve essere tra parentesi ?
    L'elenco dei costrutti delle espressioni regolari è nella documentazione di Pattern.

    Comunque:
    - per N digit: "\\d{N}"
    - per N lettere: "\\p{Alpha}{N}"

    Per N ovviamente sostituisci con un numero.
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.