Newsgroup: it.comp.java
Titolo: [Classi Regolari] Spazi bianchi davanti ad un numero

Da una stringa che mi arriva da una pesa dovrei estrapolare il *numero*
dei chili. Mi pareva che funzionasse tutto poi mi sono accorto che se mi
arrivano degli spazi bianchi davanti al numero vado in tilt.
Ho isolato il caso sperando di essere chiaro: nella seconda stringa ci
sono degli spazi bianchi davanti al numero.
Condizione: [0-9.]*
Stringa: 253.9   KG
Risultato: 253.9
BigDecimal:253.9
------------------------------------------------
Condizione: [0-9.]*
Stringa:   253.9   KG
Risultato:
Press any key to continue...
Come dovrei scriverla la condizione?
Questa è la classe che genera l'output:
------------------------------------------------------------------
import java.util.regex.*;
class ClasseRegolare{
	public static void main(String a[]) {
		//------------------------------------------------
		String condizione = "[0-9.]*";
		String stringa = "253.9   KG";
 
		System.out.println("Condizione: " + condizione);
		System.out.println("Stringa: " + stringa);
		Pattern classeRegolare = Pattern.compile(condizione);
		Matcher m = classeRegolare.matcher(stringa);
		if (m.find()) {
			String gruppo = m.group();
		    System.out.println("Risultato: " + gruppo);
			if (!gruppo.equals("")) {		
				java.math.BigDecimal peso = new java.math.BigDecimal(gruppo);
		        System.out.println("BigDecimal:" + peso);				
				}	
		}
		System.out.println("------------------------------------------------ ");
		//------------------------------------------------  
		condizione = "[0-9.]*";
		stringa = "  253.9   KG";
 
		System.out.println("Condizione: " + condizione);
		System.out.println("Stringa: " + stringa);
		classeRegolare = Pattern.compile(condizione);
		m = classeRegolare.matcher(stringa);
		if (m.find()) {
			String gruppo = m.group();
		    System.out.println("Risultato: " + gruppo);
			if (!gruppo.equals("")) {		
				java.math.BigDecimal peso = new java.math.BigDecimal(gruppo);
		        System.out.println("BigDecimal:" + peso);		
				}	
		}
	}
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Come dovrei scriverla la condizione?
Il punto indica "qualsiasi carattere" e devi farne l'escape, prova con:
(\d{0,}\.?\d+)
e catturare il gruppo 1:
if (m.groupCount() > 0)
   gruppo = m.group(1);
Ecco un po di casi funzionanti:
253.9   KG
   253.9   KG
253.9KG
   253.9KG
.5KG
.5 KG
  .5KG
  .5 KG
-- 
  -- + Setaceous Pig + --
http://www.megadix.org/
http://www.jroller.com/page/megadix/

 arrivano degli spazi bianchi davanti al numero vado in tilt.
Scusate il disturbo: vado avanti per ore su un problema e dopo 5 minuti
che, per extrema ratio, scrivo sul ng, la soluzione mi viene in mente da
sola.
Prima di analizzarla:
stringa = stringa.trim();
Ovviamente se qualche mago delle classi regolari volesse risolvere più
elegantemente il problema segnalando la condizione giusta l'intervento
sarebbe gradito :o)))
Grazie comunque
Massimiliano


 (d{0,}.?d+)
Il compilatore non me la passa:
miopath\ClasseRegolare.java:25: illegal escape character
		condizione = "(\d{0,}\.?\d+)";
La frecettina dell'errore si posiziona sotto la prima "d" della condizione.
Uso JCreator versione 2.5 build 8 con jdk 1.4.1: può dipendere da questo o
la scrivo in modo errato?
		condizione = "(\d{0,}\.?\d+)";
Comunque grazie: la tua soluzione sarebbe più elegante del "trim" :o)


Prova cosě:
condizione = "(\\d{0,}\\.?\\d+)";
perché a sua volta il backslash č un carattere di escape in Java :)


 Prova cosě:
GRANDE!!!
Funziona.
Grazie mille  :o)))
Ciao
Massimiliano
