PDA

View Full Version : [java String] sostituire, ho bisogno d'aiuto


Wilcomir
17-11-2005, 09:36
allora, dovrei sostituire una stringa a un'altra, sovrascrivendo, a un preciso indice, per intenderci una cosa del genere

public String replace (String s2, int index) {
..
return s1;
}

tipo:
s1 = "ciao si ciao";
s2 = "no";
index = 5;
s1.replace(s2, index);
dopo il trattamento:
s1--> "ciao no ciao"

capito il mio problema? :)
grazie a tutti quelli che mi risponderanno!

ciao a tutti!!!

andbin
17-11-2005, 10:10
allora, dovrei sostituire una stringa a un'altra, sovrascrivendo, a un preciso indice, per intenderci una cosa del genere

public String replace (String s2, int index) {
..
return s1;
}

tipo:
s1 = "ciao si ciao";
s2 = "no";
index = 5;
s1.replace(s2, index);
dopo il trattamento:
s1--> "ciao no ciao"

capito il mio problema? :)
grazie a tutti quelli che mi risponderanno!

ciao a tutti!!!
La classe String ha tre metodi per fare un replace: replace(), replaceAll() e replaceFirst(). Per quello che vuoi fare tu (sostituire in un punto preciso in base ad un indice) direi che non vanno bene.
La classe StringBuffer invece ha il metodo:

replace(int start, int end, String str)

che sembra fare al caso tuo.

Wilcomir
17-11-2005, 11:36
innanzi tutto ri-grazie. però ho un altro problema... allora:

tipo:
s1 = "ciao si ciao";
s2 = "ciao";
index = 5;
s1.replace(s2, index);
dopo il trattamento:
s1--> "ciao ciaoiao"
io vorrei -->"ciao ciao ciao"
allora in realtà io non vi ho detto tutto il problema, che è: date 3 stringe s1,s2,s3 sostituisci s3 a s2 ogni volta che s2 occorre in s1. che dite c'è un modo più furbo per farlo?


ciaooo!

andbin
17-11-2005, 12:02
allora in realtà io non vi ho detto tutto il problema, che è: date 3 stringe s1,s2,s3 sostituisci s3 a s2 ogni volta che s2 occorre in s1. che dite c'è un modo più furbo per farlo?
Sì, si può fare:

String s1 = "ciao no ciao";
String s2 = "no";
String s3 = "ciao";

String r = s1.replaceAll (s2, s3);

// r = "ciao ciao ciao"
Occhio che il primo parametro della replaceAll deve essere una "regular expression". Se usi semplici caratteri alfanumerici non c'è problema, altrimenti devi seguire le regole delle regular expression (vedere sulla documentazione di Java).

Wilcomir
17-11-2005, 12:52
grazie, non avevo notato il replace all nei metodi di String. ciaooooo!

anx721
17-11-2005, 12:53
e bada che il risultato della replace deve essere riassegnato alla variabile perche la replace ritorna una nuova stringa con le sostiuzioni effettuate, in quanto le stringhe sono non modificabili.

Wilcomir
17-11-2005, 13:03
sisi, tipo:

s1 = s1.replaceAll(s2,s3);

ora visto che sono in ballo... :stordita:

per rimpiazzare solo la PRIMA occorrenza di s2 in s1 con s3? e solo l'ULTIMA?

grazie a tutti... :)

ciao!

andbin
17-11-2005, 13:28
sisi, tipo:

s1 = s1.replaceAll(s2,s3);

ora visto che sono in ballo... :stordita:

per rimpiazzare solo la PRIMA occorrenza di s2 in s1 con s3? e solo l'ULTIMA?

grazie a tutti... :)

ciao!
replaceFirst, sempre della classe String, funziona come la replaceAll ma si ferma alla prima occorrenza. Per trovare l'ultima ... penso che debba fartela tu.

J.Carter
17-11-2005, 15:18
s2.lastIndexOf(s3)
che restituisce l'indice della posizione dell'ultima occorrenza di s3 in s1.
Conosciuto l'indice effettuare la sostituzione.

Qui (http://java.sun.com/j2se/1.5.0/docs/api/index.html?java/lang/package-summary.html) ci sono i metodi della classe String se può esserti d'aiuto.

Wilcomir
17-11-2005, 15:39
grazie a tutti, se vi può interessare ecco come ho risolto:

public String replace(String s1, String s2, String s3, int index) {
StringBuffer sB = new StringBuffer(s1);
sB = sB.delete(index, (index + s2.length()));
sB = sB.insert(index, s3);
s1 = sB.toString();
return s1;
}

public String inspectReplacingTrailing(String s1, String s2, String s3) {
for (int tStart = s1.length() - s2.length() + 1; tStart > -1; tStart--) {
if (s1.regionMatches(tStart, s2, 0, s2.length())) {
s1 = this.replace(s1, s2, s3, tStart);
break;
}
}
return s1;
}