|
|||||||
|
|
|
![]() |
|
|
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: 12112
|
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 14: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 10:02. |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
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 11: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 11: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 12:55. |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:23.




















