|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2006
Città: Cesenatico
Messaggi: 274
|
[JAVA]Problema confronto stringa con valore
Io ho questa classe:
Codice:
class Body { String stile; String jc; String rstile; String grassetto; String italico; String sottolineato; String size; String testo; String titolopict; String formatopict; public String toString() { StringBuffer buffer = new StringBuffer(); if ( stile != null ) buffer.append("Stile body: " + stile + "\n"); if ( jc != null ) buffer.append(" Jc body: " + jc + "\n"); if ( rstile != null ) buffer.append(" Rstile body " + rstile + "\n"); if ( grassetto != null ) buffer.append(" Grassetto body " + grassetto + "\n"); if ( italico != null ) buffer.append(" Italico body " + italico + "\n"); if ( sottolineato != null ) buffer.append(" Sottolineato body: " + sottolineato + "\n"); if ( size != null ) buffer.append(" Dimensione body: " + size + "\n"); if ( testo != null ) buffer.append(" Testo body: " + testo + "\n"); if ( titolopict != null ) buffer.append(" Nome immagine body: " + titolopict + "\n"); if ( formatopict != null ) buffer.append(" Formato immagine body: " + formatopict + "\n"); return buffer.toString(); } } se però provo a fare if(body.size=="24") il compilatore non entra nell'if, come mai??? riesco a farlo entrare solo se ho body.size con valore null facendo if(body.size==null)
__________________
CPU Intel i5-4590, Scheda Madre Asrock H97 Pro4, RAM DDR3 Corsair Vengeance 1600MHz 8GB CL9, Hard Disk WD Caviar Blue 1TB, SSD Crucial MX100 256GB. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1159
|
Leva le "", devi confrontare 2 interi
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: May 2006
Città: Cesenatico
Messaggi: 274
|
Se le levo l'ERRORE è questo:
C:\Documents and Settings\Utente\Desktop\DAVIDE V\Dom\bb.java:308: incomparable types: java.lang.String and int if (body.size==24) ^ perchè body.size è una stringa e 24 un intero....
__________________
CPU Intel i5-4590, Scheda Madre Asrock H97 Pro4, RAM DDR3 Corsair Vengeance 1600MHz 8GB CL9, Hard Disk WD Caviar Blue 1TB, SSD Crucial MX100 256GB. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
Codice:
body.size().equals("24")
__________________
http://www.tevigroup.it/ |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: May 2006
Città: Cesenatico
Messaggi: 274
|
così non funziona per via ()... anche facendo body.seize.equals("24") che dovrebbe essere corretto sintatticamente infatti il programma non da errori.. però quando vado a campilare mi da il segente errore java.lang.NullPointerException
__________________
CPU Intel i5-4590, Scheda Madre Asrock H97 Pro4, RAM DDR3 Corsair Vengeance 1600MHz 8GB CL9, Hard Disk WD Caviar Blue 1TB, SSD Crucial MX100 256GB. |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
|
Quote:
Se confronti due stringhe con l'operatore == in realtà stai confrontando il reference dei due oggetti stringa e ovviamente l'indirizzo della variabile body.size è diverso da quello della variabile creata implicitamente che ha come valore "24". Il metodo corretto è quindi body.size.equals("24"). Se ti lancia una nullpointer allora molto probabilmente in quel momento la variabile size dell'oggetto body non è inizializzata, oppure l'intero oggetto body ha valore null. Quindi controlla il tuo programma perchè sicuramente hai un errore di logica che si presenta al run-time oltre all'errore concettuale del confronto fra stringhe.
__________________
![]() |
|
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: May 2006
Città: Cesenatico
Messaggi: 274
|
Quote:
if (body.size!=null) poi dentro ci metto l'equlas e funziona.... GRAZIE!!! Una curiosità quando uso equalsIgnoreCase se io faccio if(body.testo.equalsIgnoreCase("indice")) lui mi trova indifferentemente Indice INDICE e indice, giusto??? if(body.testo.equalsIgnoreCase("Indice")) se io facessi così sarebbe la stessa cosa vero??? ossia mi trova quei 3 casi...
__________________
CPU Intel i5-4590, Scheda Madre Asrock H97 Pro4, RAM DDR3 Corsair Vengeance 1600MHz 8GB CL9, Hard Disk WD Caviar Blue 1TB, SSD Crucial MX100 256GB. Ultima modifica di xxdavide84xx : 20-01-2008 alle 13:54. |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
|
|
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: May 2006
Città: Cesenatico
Messaggi: 274
|
Grazie, questo ho risolto alla grande, ma ora mi si è posto un'altro piccolo problema con le Stringhe...
Se invece avessi una cosa del genere: Codice:
Class Style { String name; String based; String size; } ed ho poi da una parte questo.... if(size==null) { if (style.based !=null) { String a= style.based; (in una certa posizione) for ( int j = 0; j < styleObjects.size() ;j++) { if(a.equals(style.name); } } } come faccio ad individuare la posizione j-esima di style.name??? ossia style.name1, style.name2 ESEMPIO io ho Style 1 name=A based=null size=1 Style 2 name=B based=A size=null Style 3 name C based=B size=3 dovrei fare se size è uguale a null e based è diverso da null dovrei confrontare il based dello style in cui sono (che deve rimanere FISSO) con name(che deve variare) e se based e name sono uguali dovrei fare diventare il size che prima era null uguale al size in cui è rispettata l'uguaglianza fra based e name... In questo caso specifico dovrei fare diventare size di Style 2 = 3.... Come fare???
__________________
CPU Intel i5-4590, Scheda Madre Asrock H97 Pro4, RAM DDR3 Corsair Vengeance 1600MHz 8GB CL9, Hard Disk WD Caviar Blue 1TB, SSD Crucial MX100 256GB. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Supponendo che:
1) styleObjects è la tua collezione di oggetti Style; 2) selectedStyle (vedi codice) è l'oggetto Style attuale di riferimento su cui fare i confronti; 3) ho capito quello che vuoi fare ( ![]() non basta itereare nella collezione finchè non viene trovato il j-iesimo oggetto style che ha "name" uguale alla stringa "based" dell'oggetto Style di riferimento, al quale, a quel punto, gli si assegna come valore di "size" il valore di "size" del j-iesimo oggetto della collezione appena estratto? Codice:
Class Style { String name; String based; String size; } ed ho poi da una parte questo.... if(size==null) { if (style.based !=null) { Style selectedStyle = style; (in una certa posizione) for ( int j = 0; j < styleObjects.size() ;j++) { // elementAt() o analogo codice per recuperare un elemento Style aStyle = styleObjects.elementAt(j); // se based e name sono uguali // dovrei fare diventare il size che prima era null uguale al size in cui // è rispettata l'uguaglianza fra based e name... if( selectedStyle.based.equals( aStyle.name)) { selectedStyle.size = aStyle.size; } } } } ![]() |
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: May 2006
Città: Cesenatico
Messaggi: 274
|
Esatto!!!
Grazie, alla fine ero riuscito a risolvere questo problema... Ma ora se ne pone un'altro.... Io scorro la mia lista di oggetti e quando trovo es: string.name=A o B più pèrecisamente così in java... String stili_corretti = new String(); if (string.name.equals("A")||string.name.equals("B")) stili_corretti=string.name; Solo che se ho più di una A o una A e una B, lui mi mostra solo l'ultimo valore giusto? Se io volessi memorizzare tutti i valori come dovrei fare? Usare un StringBuffer?? Che comando dovrei dare sotto però??? stili_corretti=??
__________________
CPU Intel i5-4590, Scheda Madre Asrock H97 Pro4, RAM DDR3 Corsair Vengeance 1600MHz 8GB CL9, Hard Disk WD Caviar Blue 1TB, SSD Crucial MX100 256GB. Ultima modifica di xxdavide84xx : 21-01-2008 alle 09:02. |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
|
Quote:
![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: May 2006
Città: Cesenatico
Messaggi: 274
|
Purtroppo perchè da una class Style grande, mi serve una class Style più piccola con solo certi parametri...
__________________
CPU Intel i5-4590, Scheda Madre Asrock H97 Pro4, RAM DDR3 Corsair Vengeance 1600MHz 8GB CL9, Hard Disk WD Caviar Blue 1TB, SSD Crucial MX100 256GB. |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Credo che TigerShark intenda dire che basta che memorizzi la sequenza di "name" in un vettore/array list.
Ti istanzi un bel ArrayList<String> e ci cacci dentro le stringhe "name" incontrate. Anche se a questo punto ti conviene fare un ArrayList di oggetti Style (ArrayList<Style>) e cacciarci dentro i riferimenti degli style che hanno "name" uguale a "A" oppure "B" (in questo modo ti porti dietro tutte le info di quegli style, il loro "name" e il riferimento allo style che lo possiede, comunque questo dipende da cosa devi farci dopo). Ultima modifica di banryu79 : 21-01-2008 alle 10:28. |
![]() |
![]() |
![]() |
#15 | |
Member
Iscritto dal: May 2006
Città: Cesenatico
Messaggi: 274
|
Quote:
Codice:
private void STILI() { String style1 = new String(); ArrayList buffer = new ArrayList(); for ( int i = 0; i < styleObjects.size(); i++) { Style style = (Style)styleObjects.elementAt(i); if ( style.jc != null && style.jc.equals("both") ) if ( style.font != null && style.font.equals("Times New Roman") ) if ( style.size != null ) if ( style.size.equals("24") || style.size.equals("26") ) if ( style.grassetto == null && style.italico == null && style.sottolineato == null ) { style1=style.name; buffer.add(style1); } } } Codice:
private void STILI() { String style1 = new String(); StringBuffer buffer = new StringBuffer(); for ( int i = 0; i < styleObjects.size(); i++) { Style style = (Style)styleObjects.elementAt(i); if ( style.jc != null && style.jc.equals("both") ) if ( style.font != null && style.font.equals("Times New Roman") ) if ( style.size != null ) if ( style.size.equals("24") || style.size.equals("26") ) if ( style.grassetto == null && style.italico == null && style.sottolineato == null ) { style1=style.name; buffer.append(style1); } } es adesso mi viene [A , B ] nel primo caso e A B nel secondo...però a me poi servono i valori distinti: ossia A e B separati.... Ho provato a fare System.out.println(buffer.equals("A")), ma mi restituisce valore false, dove sbaglio???
__________________
CPU Intel i5-4590, Scheda Madre Asrock H97 Pro4, RAM DDR3 Corsair Vengeance 1600MHz 8GB CL9, Hard Disk WD Caviar Blue 1TB, SSD Crucial MX100 256GB. |
|
![]() |
![]() |
![]() |
#16 | |||
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Oppure, se ti piace di più, con un ciclo while utilizzi un iterator e ti fai dare ogni stringa (ogni elemento). Quote:
![]() Quote:
Ripeto, leggi i Javadoc delle classi per sapere di preciso come si comportano i metodi delle classi che stai usando, non ti portano via molto tempo, te l'assicuro ![]() Ultima modifica di banryu79 : 21-01-2008 alle 10:53. |
|||
![]() |
![]() |
![]() |
#17 | |
Member
Iscritto dal: May 2006
Città: Cesenatico
Messaggi: 274
|
Quote:
purtroppo non è possibile fare buffer.elementAt(indice) con ArrayList.....o almeno a me da ERRORE
__________________
CPU Intel i5-4590, Scheda Madre Asrock H97 Pro4, RAM DDR3 Corsair Vengeance 1600MHz 8GB CL9, Hard Disk WD Caviar Blue 1TB, SSD Crucial MX100 256GB. |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
|
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: May 2006
Città: Cesenatico
Messaggi: 274
|
Perfetto!!!
infatti ora facendo cos' Codice:
private void STILI() { String style1 = new String(); ArrayList buffer = new ArrayList(); for ( int i = 0; i < styleObjects.size(); i++) { Style style = (Style)styleObjects.elementAt(i); if ( style.jc != null && style.jc.equals("both") ) if ( style.font != null && style.font.equals("Times New Roman") ) if ( style.size != null ) if ( style.size.equals("24") || style.size.equals("26") ) if ( style.grassetto == null && style.italico == null && style.sottolineato == null ) { style1 = style.name; buffer.add(style1); System.out.println(style1); } } for(int j=0; j<buffer.size();j++) { System.out.println("PROVA" + buffer.get(j)); } } io ho questo metodo e lo devo fare interagire conun'altro.... ossia: Codice:
private void STILI() { String style1 = new String(); ArrayList buffer = new ArrayList(); for ( int i = 0; i < styleObjects.size(); i++) { Style style = (Style)styleObjects.elementAt(i); if ( style.jc != null && style.jc.equals("both") ) if ( style.font != null && style.font.equals("Times New Roman") ) if ( style.size != null ) if ( style.size.equals("24") || style.size.equals("26") ) if ( style.grassetto == null && style.italico == null && style.sottolineato == null ) { style1 = style.name; buffer.add(style1); System.out.println(style1); } }} Codice:
private void aa() { for ( int i = 0; i < bodyObjects.size(); i++) { Body body = (Body)bodyObjects.elementAt(i); if ( body.testo != null ) { STILI(); for(int j=0; j<buffer1.size();j++) { if(body.name.equals(buffer1.get(j))) System.out.println("OK"); } } } }
__________________
CPU Intel i5-4590, Scheda Madre Asrock H97 Pro4, RAM DDR3 Corsair Vengeance 1600MHz 8GB CL9, Hard Disk WD Caviar Blue 1TB, SSD Crucial MX100 256GB. Ultima modifica di xxdavide84xx : 21-01-2008 alle 11:55. |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:33.