Newsgroup: it.comp.java
Titolo: if(incateg.charAt(0).equals("B"))  MI DA ERRORE???!!

Ho una stringa incateg che puo' assumere valori del genere:
BBTAR
BBTWD
BCMAR
BCMWD
OARWD
OARSW
Mi serve fare un if a seconda se la prima lettera e' una B o una O
Ho provato in questi modi ma mi da errore:
if(incateg.charAt(0).equals("B"))
if(incateg.charAt(0).equals('B'))
Ma si puo' concatenare .eguals ad un'altra funzione?
Essendo un carattere ci vogliono gli apici o le virgolette?
Ho provato anche cosi', ma non va:
if(incateg.charAt(0)=='B')
Scusate, ma sono poco pratico.
Grazie

 Ho provato in questi modi ma mi da errore:
in tutta franchezza quando leggo "mi da un errore" senza che sia 
riportato l'errore mi rifiuto di guardare il problema, anche se fosse il 
caso pi� banale del mondo.

 caso più banale del mondo.
Si hai perfettamente ragione. Anch'io non sopporto la stessa cosa.
Non ho riportato l'errore per non confondere. Perche' avevo il sentore che 
ci fossero piu' errori.
Infatti ora che ho scritto come mi hai suggerito tu, mi da solo un'errore:
Cannot refer to a non-final variable incateg inside an inner class defined 
in a different method
Sono intoppato anche altre volte in questo errore, ma non ho mai compreso 
bene il reale significato e la giusta soluzione.
La variabile incateg e' dichiarata String, all'inizio di tutto. Che altro 
non e' che un parametro nell'url 
www.xxx.it/products/show.html?categ=BBTAR
public Index(PageParameters inparams) {
String incateg = inparams.getString("categ");
Ti ringrazio tantissimo del tuo aiuto.

 bene il reale significato e la giusta soluzione.
hai la variabile incateg definita in un metodo e la stai usando dentro 
un metodo di una inner class che probabilmente crei al volo dentro lo 
stesso metodo. come ti suggerisce il messaggio di errore la cosa si può 
fare, ma occorre che la variabile sia dichiarata 'final'.
quindi il problema non è come fai il confronto ma come hai dichiarato 
quella variabile.

rootkit wrote:

ho aggiunto final ed ora funziona.
Ti ringrazio molto!
Ciao

Ciao Spirit,
per la prossima volta, cerca di postare un po' più di codice e lo
stacktrace di errore.
Così che:
1. Al volo si riesca a darti una mano...
2. Anche quelli che vogliono imparare e seguono il NG, vedendo il
codice, inquadrano meglio il problema.
Ok?
Ciao, Davide.

Per puro spirito di conversazione
if(incateg.charAt(0).equals('B')) non compila perchè non c'è
autoboxing tra char e Character... vi risulta?
if(incateg.charAt(0).equals("B")) come sopra e comunque darebbe sempre
false inquanto confronta Character e String


 false inquanto confronta Character e String
La ragione per cui non compila è quella come sopra.
Per confrontare due oggetti, devi ricondurli allo stesso tipo e poi
confrontarli.
Nel tuo caso hai scelto di convertire tutto in Character, ma a mio
avviso è meglio riportare tutto a stringa, è più semplice.
Per sciogliere ogni dubbio, fai una prova:
package test;
import org.apache.commons.lang.StringUtils;
public class Test{
	public static void main(String[] args) {
		Character c = 'B';
		String s = "B";
		System.out.println(c.equals(s));                // false
		System.out.println(s.equals(c));                // false
		System.out.println(s.startsWith(c.toString())); // true
		System.out.println(s.equals(c.toString()));     // true
		System.out.println(s.equals(""+c));             // true e se c
arriva da fuori elimini le nullpointer exception
		System.out.println((""+c).equals(s));           // true e previeni
le nullpointer exception su entrambe le variabili, ma è bruttino
		System.out.println(StringUtils.equals(s, ""+c));// true, previene le
nullpointer, un po' più elegante, ma hai bisogno di chiedere aiuto a
StringUtils
		// Prova ad usare le stringhe, semplifichi:
		String chiaveCheArrivaDaFuori = "BBTAR";
		String sTest = "B";
		// Hai tutte stringhe e si occupa la librerie di verificare se gli
oggetti sono valorizzati.
		System.out.println(StringUtils.startsWith((chiaveCheArrivaDaFuori,
sTest));
	}
}
Spero di esser stato di aiuto,
Ciao, Davide.

 Ciao, Davide.
Si moltissimo.
Grazie a tutti!