PDA

View Full Version : [Java] String.replace


HiroNakamura
13-03-2008, 10:40
Ma scusate non c'è un metodo che trova all'interno di una stringa una sottostringa e la sostituisce con un'altra?

cioè tipo :

String lin = "oggi sono stanco";
lin.replaceAll("stanco","forte");


Purtroppo però così non và perchè il metodo replaceAll vuole una regex come primo parametro.

ps. "stanco" non è fisso quindi non posso fare un'equivalente regex dal momento che cambia a seconda di una variabile...

vladix
13-03-2008, 10:57
in java le stringhe son immutabili , quindi quando tu fai

lin.replaceAll("stanco","forte");

non modifichi la stringa lin , ma ne crei un altra , a quale non puoi accedere xche senza reference ,

devi fare cosi

String lin = "oggi sono stanco";
lin = lin.replaceAll("stanco","forte");

e funziona con i regex e anche senza

andbin
13-03-2008, 11:08
String lin = "oggi sono stanco";
lin.replaceAll("stanco","forte");


Purtroppo però così non và perchè il metodo replaceAll vuole una regex come primo parametro.Vero. Ma se noti esiste un:

replace(CharSequence target, CharSequence replacement)

e String è-un CharSequence, quindi puoi passare 2 stringhe (che non hanno niente a che fare con le regex).

(solo da Java 5 c'è questo replace)

HiroNakamura
13-03-2008, 11:26
grazie ad entrambi,
ho usato la soluzione di vladix visto che comunque sto usando il jdk 1.4

andbin
13-03-2008, 11:52
ho usato la soluzione di vladixMa vladix ha usato ancora replaceAll, che usa le regex. :stordita:

visto che comunque sto usando il jdk 1.4Lo temevo .... :rolleyes:
Ma si può ancora fare (con un minimo di "sbattimento"), facendo un piccolo metodo che sfrutta StringBuffer e i suoi metodi indexOf e replace.

vladix
13-03-2008, 12:07
:confused: mah ora sono io che sono confuso ... volendo anche "stanco" e un pattern ( o regex ) ... e usando

lin.replaceAll("stanco","forte");

funziona cmq ... non capisco dove e il problema ( o la differenza )

andbin
13-03-2008, 12:27
funziona cmqIn quel caso specifico, certo che funziona.

... non capisco dove e il problema ( o la differenza )HiroNakamura ha scritto: "stanco" non è fisso quindi non posso fare un'equivalente regex dal momento che cambia a seconda di una variabile...

Se non si conosce a priori la stringa da cercare (e si presuppone che non sia una regex), non si può usare replaceAll così su 2 piedi.