Newsgroup: it.comp.java
Titolo: Come cancellare caratteri da una stringa???

Salve a tutti, è da un po' che mi sbatto ma non trovo nulla e mi sembra
strano che con Java una cosa così banale non si possa fare...
Il mio problema è il seguente devo fare il controllo su una stringa e
togliere tutti i caratteri che non mi piacciono ad esempio i . e le , dai
numeri.
Io vorrei fare una cosa del tipo:
String str = "1.000";
String str2 = str.replace('.','');
Problema se metto '' Java si imbufalisce perchè non è un carattere ok
allora dico uso str.replace('.',char(0)); ma no perchè il (char)0 mi viene
tradotto in un quadratino OK allora proviamo con str.replace( '.',
'\u0000' ); e nulla stessa cosa di (char)0 ( in effetti son la stessa cosa
).
Ma come faccio a fare un replace su di una stringa di un carattere con un
carattere nullo??? Il quadratino che mi sta a significare che nella mappa
caratteri il null ( \u0000 ) è un carattere non mappato????
Per ora faccio un while sulla stringa e me la ricostruisco con ciò che mi
piace ma son curioso di sapere se replace funziona...
Ciao Ivan
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ).
Ciao, quello che hai pensato di fare con '\u0000' come parametro newchar
funziona.
Prova questo stupidissimo codice:
        public class prova{
                public prova(){
 
                        String stringa = new String("1.000");
                        stringa = stringa.replace('.', '\u0000');
 
                        System.out.println(stringa);
                }
 
                public static void main(String[] args){
 
                        prova stampa = new prova();
                }
        }
Io uso l'SDK 1.4.1 su una RedHat 9.0. Il replace funziona, non so magari
c'e' qualcosa che non ti fa ottenere il risultato che vuoi da qualche altra
parte.........

 
...non mi e' chiaro il senso di rimpiazzare un carattere con quello con
codice 0...non mi sembra una cosa equivalente all'eliminazione di un
carattere.
Se vuoi eliminare un carattere da una stringa, potresti usare il metodo
replaceAll:
String s = "1.000";
s = s.replaceAll("\\.", "");
-- 
Lucio Benfante
Java User Group Padova: 
http://www.jugpadova.it
Brainbench MVP for Java 1: 
http://www.brainbench.com
MyTranscript: 
http://www.brainbench.com/transcript.jsp?pid=167064

 parte.........
Credo sia il S.O. io uso Win2000 SP4... Perchè ho sentito che su alcuni
sistemi la cosa funziona e su altri no...


 s = s.replaceAll("\.", "");
Ora proverň con replaceAll
Grazie


 Ivan
Confermo, ho provato il metodo sul mio Win2000 sp3 sempre con SDK 1.4.1
e il replace con '\u0000' come argomento mi sostituisce con uno 
spazio vuoto anziche' rimuovendo il carattere dalla stringa,
cosa che appunto sotto RedHat non accade.......
Alla prox.

 
...si', ma non significa "nessun carattere".


 
In ogni caso valuta anche l'aspetto prestazionale: le stringhe sono
oggetti immutabili, quindi non sono pensati per essere modificati. Infatti
quando esegui replaceAll, non viene modificata la stringa che avevi, ma ne
viene creata una nuova. Per i casi di frequente modifica di stringhe non
si dovrebbe usare la classe String, ma la classe StringBuffer.
Per darti un'indea (sicuramente il mio benchmark non e' perfetto e puo'
essere opinabile) ho scritto un po' di codice che esegue l'operazione
10000 volte, prima usando String e poi usando StringBuffer.
Il risultato e' a favore di quest'ultimo, con un tempo di esecuzione circa
10 volte inferiore (ma bisogna anche considerare che il metodo replaceAll
e' decisamente piu' complesso del mio deleteAll).
import java.util.Date;
public class SimpleTest {
    public static void main(String[] args) {
 	String sArray[] = new String[10000];
	for(int i=0; i < 10000; i++) {
	    sArray[i] = new String("1.000");
	}
 	StringBuffer sbArray[] = new StringBuffer[10000];
	for(int i=0; i < 10000; i++) {
	    sbArray[i] = new StringBuffer("1.000");
	}
	Date start = new Date();
	for(int i=0; i < 10000; i++) {
	    sArray[i].replaceAll("\\.", "");
	}
	Date end = new Date();
	System.out.println("Removing with String: "
                    +(end.getTime()-start.getTime())+" ms");
	int index = 0;
	start = new Date();
	for(int i=0; i < 10000; i++) {
	    deleteAll(sbArray[i], ".");
	}
	end = new Date();
	System.out.println("Removing with StringBuffer: "
                    +(end.getTime()-start.getTime())+" ms");
    }
    public static void deleteAll(StringBuffer sb, String c) {
	int index = sb.indexOf(c);	
	while (index != -1) {
	    sb.deleteCharAt(index);
	    index = sb.indexOf(c, index);
