Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Problemi con le stringhe !

    Salve a tutti, in Java tutti sappiamo che per paragonare una stringa a un'altra si usa x.equals(""), ma il mio problema e se voglio dire diverso da "". Mi spiego meglio, ho 2 textfield, e voglio che aggiunge i valori delle textfield a delle JList ecco l'esempio.

    public class actionListener implements ActionListener{

    public void actionPerformed(ActionEvent e){

    String azione = e.getActionCommand();
    String nome = text1.getText();
    String numero = text2.getText();

    if (azione.equals("Aggiungi alla Rubrica") && nome != "" && numero != ""){

    model1.addElement(text1.getText());
    model2.addElement(text2.getText());
    }
    }
    }
    dal mio esempio, il programma non da errori, ma delle ultime 2 condizioni non ne tiene conto,
    e se io non scrivo niente nelle textfield, lui lascia uno spazio nella jlist.

    ho provato pure a mettere questo nella condizione if (azione.equals("..") && !text1.equals(""))
    sapendo che ! e una negazione, ma niente, per piacere illuminatevi voi.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Problemi con le stringhe !

    Originariamente inviato da Scofield095
    Salve a tutti, in Java tutti sappiamo che per paragonare una stringa a un'altra si usa x.equals(""), ma il mio problema e se voglio dire diverso da "". Mi spiego meglio, ho 2 textfield, e voglio che aggiunge i valori delle textfield a delle JList ecco l'esempio.

    public class actionListener implements ActionListener{

    public void actionPerformed(ActionEvent e){

    String azione = e.getActionCommand();
    String nome = text1.getText();
    String numero = text2.getText();

    if (azione.equals("Aggiungi alla Rubrica") && nome != "" && numero != ""){

    model1.addElement(text1.getText());
    model2.addElement(text2.getText());
    }
    }
    }
    dal mio esempio, il programma non da errori, ma delle ultime 2 condizioni non ne tiene conto,
    e se io non scrivo niente nelle textfield, lui lascia uno spazio nella jlist.

    ho provato pure a mettere questo nella condizione if (azione.equals("..") && !text1.equals(""))
    sapendo che ! e una negazione, ma niente, per piacere illuminatevi voi.
    Queigli operatori != come hai detto sono sbagliati, ed è corretto utilizzare !equals (se preferisci c'è anche il metodo isEmpty di String), perciò il tuo problema dev'essere da qualche altra parte.

    P.S.: metti il codice fra tag [CODE].

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813

    Re: Problemi con le stringhe !

    Originariamente inviato da Scofield095
    Salve a tutti, in Java tutti sappiamo che per paragonare una stringa a un'altra si usa x.equals(""), ma il mio problema e se voglio dire diverso da "". Mi spiego meglio, ho 2 textfield, e voglio che aggiunge i valori delle textfield a delle JList ecco l'esempio.

    public class actionListener implements ActionListener{

    public void actionPerformed(ActionEvent e){

    String azione = e.getActionCommand();
    String nome = text1.getText();
    String numero = text2.getText();

    if (azione.equals("Aggiungi alla Rubrica") && nome != "" && numero != ""){

    model1.addElement(text1.getText());
    model2.addElement(text2.getText());
    }
    }
    }
    dal mio esempio, il programma non da errori, ma delle ultime 2 condizioni non ne tiene conto,
    e se io non scrivo niente nelle textfield, lui lascia uno spazio nella jlist.

    ho provato pure a mettere questo nella condizione if (azione.equals("..") && !text1.equals(""))
    sapendo che ! e una negazione, ma niente, per piacere illuminatevi voi.
    tutti sappiamo, e metti nome != ""?

    la stringa vuota è comunque una stringa e gli operatori booleani sui tipi oggetti confrontano i riferimenti.
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  4. #4
    A parte che con s una String puoi fare
    codice:
    s.equals("");
    e che quello che sbagli nel tuo esempio è che stai confrontando text1 (che è un JTextField) con la stringa vuota
    e non il suo contenuto che è stringa

    Considera quanto segue :
    Esiste il più comodo metodo isEmpty() per sapere se una stringa è vuota;

    Eventualmente conviene chiamare il metodo equals sulla stringa costante in modo da evitare un eventuale NullPointerException se la tua stringa è null.
    Quindi :
    codice:
    String s = null;
    s.equals("") ; //ti solleva un eccezione; 
    "".equals(s);  // ritorna false;
    il metodo equals e l'operatore == , sono diversi in quanto il primo è un metodo della classe object che di solito confronta il contenuto degli oggetti (nel caso delle stringhe, confronta se contengono la stessa sequenza di caratteri), mentre il secondo confronta se le variabili puntano allo stesso indirizzo di memoria.

    Quindi :
    codice:
    String s = "ciao";
    String t = ("ciao.buona.sera".split("."))[0];
    t.equals(s) // true
    t == s // false

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Mr.Bloom
    codice:
    String s = "ciao";
    String t = ("ciao.buona.sera".split("."))[0];
    t.equals(s) // true
    t == s // false
    Giusto per completezza, l'espressione regolare corretta da passare a split è "\\.".

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    con versioni di java antecedenti la 6 basta fare

    codice:
    String s = "   "; 
    if (s.trim().length()  == 0) {
      System.out.println("La stringa è vuota");
    
    }
    RTFM Read That F*** Manual!!!

  7. #7
    Grazie mille a tutti.... so che era una domanda stupida la mia, ho fatto programmi molto più complicati, ma non avevo mai riscontrato questo problema. Comunque ho risolto così:

    String s = "a";
    codice:
    if (!s.isEmpty()){
         System.out.println("la stringa non è vuota");           
    }
    non avevo mai usato il code, da quel che ho capito nel primo messaggio devo usare i tag dell'html.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Aggiungo una cosa... quando hai oggetti (come le stringhe) che provengono da altri oggetti, fai sempre un test sulla nullità dell'oggetto prima di usarlo.

    codice:
    String s = ...   // Questa stringa proviene da qualcos'altro
    if ((s != null) && !s.isEmpty()) {
       // La stringa non è vuota
    }
    Se l'inizializzazione la fai da codice (quindi, o richiami esplicitamente una new o, nel caso delle stringhe, assegni effettivamente una costante stringa) il problema non si pone, ma quando la valorizzazione dell'oggetto dipende da un altro oggetto, le cose possono sempre andare male.

    Altra cosa: quando devi effettuare confronti con valori costanti, metti sempre le costanti a sinistra e/o richiama l'equals sugli oggetti sicuramente non nulli. Il codice sopra è perfettamente equivalente al seguente

    codice:
    if ((s != null) && !s.equals("")) {
       // La stringa non è vuota
    }
    e quest'ultimo si può agevolmente ridurre a questo:

    codice:
    if ( !"".equals(s) ) {
       // La stringa non è vuota
    }
    (che col tempo dovrebbe diventare familiare... )

    il quale sfrutta una proprietà importante del metodo equals(): un oggetto nullo non è mai uguale a un oggetto non nullo.


    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

    chiudiamo post

    Grazie lele ne terrò conto

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.