AppletTalk.com Forum Index AppletTalk.com
Java discussions newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Operazioni su Stringhe (Consigli)!

 
Post new topic   Reply to topic    AppletTalk.com Forum Index -> Java (Italian)
View previous topic :: View next topic  
Author Message
Lucilla Mariani
Guest





PostPosted: Wed Mar 29, 2006 12:46 pm    Post subject: Operazioni su Stringhe (Consigli)! Reply with quote



Ciao a tutti,

volevo chiederVi consigli relativamente ad una gestione di caratteri
all'interno di Stringhe.
Utilizzando il Metodo Substring riesco a gestire il tutto, pero'
vorrei capire se esiste (e penso proprio di si) qualche altro Metodo
un po' piu' elegante per effettuare quanto segue:

Leggo da Oracle un campo Stringa di 8 caratteri.
Questa stringa potrebbe contenere il carattere - (trattino).
Se presente devo togliere il carttere e compattare la Stringa.

Esempio:

Stringa "ABC-DE" deve diventare "ABCDE" oppure
Stringa "A-BCDE" deve diventare "ABCDE", etc...

Bye.
Lucilla.




--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Back to top
Guest






PostPosted: Wed Mar 29, 2006 1:12 pm    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote



O usi indexOf e substring o usi (consigliato) replace
Back to top
Lucilla Mariani
Guest





PostPosted: Wed Mar 29, 2006 1:41 pm    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote



"pioneer" <pioneer (AT) inwind (DOT) it> wrote in message
news:1143636641.334075.191140 (AT) v46g2000cwv (DOT) googlegroups.com

Quote:
O usi indexOf e substring o usi (consigliato) replace

Scusa, potresti farmi un esempio di Replace ?

Cioa e grazie.
Lucilla.



--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Back to top
Gian Uberto Lauri
Guest





PostPosted: Wed Mar 29, 2006 2:12 pm    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote

Quote:
Long count = 12.19.13.3.1; tzolkin = 2 Imix; haab = 19 Cumku.
I get words from the Allmighty Great Gnus that
"LM" == Lucilla Mariani <lucillam (AT) hotmail (DOT) com> writes:

LM> "pioneer" <pioneer (AT) inwind (DOT) it> wrote in message
LM> news:1143636641.334075.191140 (AT) v46g2000cwv (DOT) googlegroups.com

Quote:
O usi indexOf e substring o usi (consigliato) replace

LM> Scusa, potresti farmi un esempio di Replace ?

Purtroppo la replace non si può usare.

Puoi usare il metodo replaceAll() o il metodo replaceFirst() di String
(replaceAll() se c'è più di un trattino), ma potrebbero non essere
efficienti (sono solo delle scorciatoie per fare quello che avevo
indicato nel mio primo post di questo thread).

Puoi fare

nuova = vecchia.replaceFirst("([^-]*)-([^-]*)","$1$2");

--
/\ ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
//--\ | | \| | Integralista GNUslamico
\/ e allevatore di bug da competizione
Back to top
Gian Uberto Lauri
Guest





PostPosted: Wed Mar 29, 2006 2:12 pm    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote

Quote:
"LM" == Lucilla Mariani <lucillam (AT) hotmail (DOT) com> writes:

LM> Ciao a tutti,

LM> Leggo da Oracle un campo Stringa di 8 caratteri. Questa stringa
LM> potrebbe contenere il carattere - (trattino). Se presente devo
LM> togliere il carttere e compattare la Stringa.

Questa parrebbe proprio "pappa" per le espressioni regolari, il
Pattern dovrebbe usare la regexp \([^-]*\)-\([^-]\) ed il Matcher
dovrebbe usare $1$2 come "replacement".

Temo tuttavia che per un pattern così semplice e per un input
consistente la cosa diventi poco efficiente (un matcher creato per
ogni stringa, ad esempio).

Vista la banalità del pattern e dell'operazione, nonché il fatto che
ogni stringa non ha più di 8 caratteri (possibilmente meno di 8 se su
Oracle è un VARCHAR) io farei un bel loop usando il metodo charAt()
per individuare ogni singolo carattere, e se questo non è "-" lo
accodi ad uno StringBuffer, la stringa finale la ottieni dallo
StringBuffer a fine ciclo.

Se devi lavorare su un recordset ti conviene creare lo StringBuffer
all'inizio e svuotarlo ad ogni nuova stringa da elaborare.

Fare tanto taglia e cuci di stringhe, anche se facile da codificare,
può non essere efficiente in quanto le stringhe sono oggetti
immutabili e ne vengono quindi creati sempre di nuovi sullo heap. Lo
StringBuffer è molto più efficiente nella gestione della memoria.

--
/\ ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
//--\ | | \| | Integralista GNUslamico
\/ e allevatore di bug da competizione
Back to top
Gian Uberto Lauri
Guest





PostPosted: Wed Mar 29, 2006 2:12 pm    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote

Quote:
Long count = 12.19.13.3.1; tzolkin = 2 Imix; haab = 19 Cumku.
I get words from the Allmighty Great Gnus that
"p" == pioneer <pioneer (AT) inwind (DOT) it> writes:

p> O usi indexOf e substring o usi (consigliato) replace
^^^^^^^

Già, dimenticavo. Che a naso fa quello che descrivevo nella seconda
parte del mio post.

<semiserio>
Visto che l'input è al più di otto caratteri, si potrebbe usare questa
duffizzando il loop :)

0001 public String foo(String ingresso) {
0002 // buffer è un membro privato della classe che contiene foo
0003 buffer.delete(0, buffer.length());
0004
0005 int i = 0;
0006 char c;
0007 StringBuffer bar; // questo serve solo per far contenta la
0008 // sintassi
0009
0010 switch (8 - ingresso.length()) {
0011 case 0:
0012 c = ingresso.charAt(i++);
0013 bar = (c=='-')?null:buffer.append(c);
0014
0015 case 7:
0016 c = ingresso.charAt(i++);
0017 bar = (c=='-')?null:buffer.append(c);
0018
0019 case 6:
0020 c = ingresso.charAt(i++);
0021 bar = (c=='-')?null:buffer.append(c);
0022
0023 case 5:
0024 c = ingresso.charAt(i++);
0025 bar = (c=='-')?null:buffer.append(c);
0026
0027 case 4:
0028 c = ingresso.charAt(i++);
0029 bar = (c=='-')?null:buffer.append(c);
0030
0031 case 3:
0032 c = ingresso.charAt(i++);
0033 bar = (c=='-')?null:buffer.append(c);
0034
0035 case 2:
0036 c = ingresso.charAt(i++);
0037 bar = (c=='-')?null:buffer.append(c);
0038
0039 case 1:
0040 c = ingresso.charAt(i++);
0041 bar = (c=='-')?null:buffer.append(c);
0042
0043 }
0044
0045 return buffer.toString();
0046 }

(Si, non mi fa affatto piacere che il Duff's Device non si compili in Java)
</semiserio>

--
/\ ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
//--\ | | \| | Integralista GNUslamico
\/ e allevatore di bug da competizione
Back to top
Gian Uberto Lauri
Guest





PostPosted: Wed Mar 29, 2006 2:12 pm    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote

Quote:
Long count = 12.19.13.3.1; tzolkin = 2 Imix; haab = 19 Cumku.
I get words from the Allmighty Great Gnus that
"GUL" == Gian Uberto Lauri <saint (AT) spammer (DOT) impiccati.it> writes:


p> O usi indexOf e substring o usi (consigliato) replace
GUL> ^^^^^^^

GUL> Già, dimenticavo.

Già pirlotto di un Gian, dimenticavi di leggere con attenzione la
firma di replace().

Purtroppo i parametri di ingresso di replace sono di tipo char, '' non
è una costante valida e quindi non si può usare.

--
/\ ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
//--\ | | \| | Integralista GNUslamico
\/ e allevatore di bug da competizione
Back to top
Guest






PostPosted: Wed Mar 29, 2006 3:12 pm    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote

Sorry, nella fretta mi sono perso l'All (replaceAll).

Come ti usa te l'ha già scritto Gian.

L'altro modo è così:

String s = "a-b--c";
StringBuffer sb = new StringBuffer();
for (int i=0; i<s.length(); i++){
if (s.charAt(i)!= '-'){
sb.append(s.charAt(i));
}
}
s = sb.toString();
Back to top
Gian Uberto Lauri
Guest





PostPosted: Wed Mar 29, 2006 3:12 pm    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote

Quote:
Long count = 12.19.13.3.1; tzolkin = 2 Imix; haab = 19 Cumku.
I get words from the Allmighty Great Gnus that
"m" == marcopar <marcoparREMOVE (AT) gmail (DOT) com> writes:

m> non capisco il perche' di questa regexp. secondo me basta fare:

m> nuova = vecchia.replacaAll("-","");

Indubbiamente. Mi era "rimasta in testa" una regexp precedente...

--
/\ ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
//--\ | | \| | Integralista GNUslamico
\/ e allevatore di bug da competizione
Back to top
marcopar
Guest





PostPosted: Wed Mar 29, 2006 3:12 pm    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote

In data Wed, 29 Mar 2006 15:53:12 +0200, Gian Uberto Lauri ha scritto:


Quote:

nuova = vecchia.replaceFirst("([^-]*)-([^-]*)","$1$2");

non capisco il perche' di questa regexp. secondo me basta fare:

nuova = vecchia.replacaAll("-","");

o replaceFirst...

bsh % System.out.println("AAA-A---A-A".replaceAll("-",""));
AAAAAA
Back to top
Gian Uberto Lauri
Guest





PostPosted: Wed Mar 29, 2006 4:13 pm    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote

Quote:
"p" == pioneer <pioneer (AT) inwind (DOT) it> writes:

p> Sorry, nella fretta mi sono perso l'All (replaceAll).

Capita

Quote:
0001 String s = "a-b--c";
0002 StringBuffer sb = new StringBuffer();
0003 for (int i=0; i<s.length(); i++){
0004 if (s.charAt(i)!= '-'){
0005 sb.append(s.charAt(i));
0006 }
0007 }
0008 s = sb.toString();

Versione più seria, valida per input di ogni dimensione, del codice
che avevo scritto per gioco² (ma che è un infinitesimo più veloce ma
limitata a stringhe di max 8 caratteri Smile Smile).

--
/\ ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
//--\ | | \| | Integralista GNUslamico
\/ e allevatore di bug da competizione

²programmare è un divertimento... come gioco può esser simile a dare
testate sul muro, ma con minor possibilità di avere una ricom-
pensa. Oppure la cosa più divertente che puoi fare coi vestiti addosso
- i vestiti non sono obbligatori.
Back to top
Lucilla Mariani
Guest





PostPosted: Thu Mar 30, 2006 8:19 am    Post subject: Re: Operazioni su Stringhe (Consigli)! Reply with quote

"pioneer" <pioneer (AT) inwind (DOT) it> wrote in message
news:1143643220.691281.55570 (AT) v46g2000cwv (DOT) googlegroups.com

Grazie....mi sembra una buona soluzione....!!!

Lucilla.



--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Back to top
Display posts from previous:   
Post new topic   Reply to topic    AppletTalk.com Forum Index -> Java (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.