| View previous topic :: View next topic |
| Author |
Message |
Lucilla Mariani Guest
|
Posted: Wed Mar 29, 2006 12:46 pm Post subject: Operazioni su Stringhe (Consigli)! |
|
|
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
|
Posted: Wed Mar 29, 2006 1:12 pm Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
O usi indexOf e substring o usi (consigliato) replace |
|
| Back to top |
|
 |
Lucilla Mariani Guest
|
Posted: Wed Mar 29, 2006 1:41 pm Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
"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
|
Posted: Wed Mar 29, 2006 2:12 pm Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
| 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
|
Posted: Wed Mar 29, 2006 2:12 pm Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
| 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
|
Posted: Wed Mar 29, 2006 2:12 pm Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
| 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
|
Posted: Wed Mar 29, 2006 2:12 pm Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
| 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
|
Posted: Wed Mar 29, 2006 3:12 pm Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
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
|
Posted: Wed Mar 29, 2006 3:12 pm Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
| 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
|
Posted: Wed Mar 29, 2006 3:12 pm Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
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
|
Posted: Wed Mar 29, 2006 4:13 pm Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
| 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 ).
--
/\ ___
/___/\__|_|\_|__|___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
|
Posted: Thu Mar 30, 2006 8:19 am Post subject: Re: Operazioni su Stringhe (Consigli)! |
|
|
"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 |
|
 |
|