Reemplazar caracter en String

jguerre
12 de Marzo del 2006
Hola,

Tengo un String y necesito reemplazar en caracter que esta en la posicion i;

No pille un metodo de la clase String que me lo permita.

¿Alguna sugerencia o ayuda?

gracias

trFox
12 de Marzo del 2006
Revisa la clase BufferString, igual y encuentras algo que te sirva.

Yo Hace poco hice esta clasecilla pero solo hice una que otra pequeñas prueba, así que no se si sirva bien. De todas formas la mando igual y te sirve de algo, si no sirve pues comentas en que es en lo que esta fallando. O también si crees que pudiera mejorarse la forma de hacer las cosas...

Pues ahí va mi pequeño pinino...

package com.mx.hsbc.motivator.utilerias.cadenas;

import java.util.Vector;

/**
* @author Eugenio Flores
* @version 1.0
*
* Clase que permite realizar algunas tareas con cadenas, como:
* <OL>
* <LI>eliminar una subcadena contenida en una cadena</LI>
* <LI>sustituir una subcadena por otra subcadena, dentro de una cadena</LI>
* <LI>contar cuantes veces aparece una subcadena dentro de una cadena</LI>
* <LI>tokenizar una cadena</LI>
* </OL>
*/
public class ManipularCadena {

/**
* Metodo que elimina una subcadena contenida en una cadena
*
* @param cadena Cadena a la que se le elimina subcadena
* @param subcadena Subcadena a eliminar en cadena
*
* @return Cadena sin apariciones de la subcadena
*/
public static String eliminarSubcadena(String cadena, String subcadena) {
int[] posiciones = obtenerPosionesSubcadena(cadena, subcadena);
String resultado = "";
int posicion_inicial = 0;
int posicion_final = 0;
int i;

if(null == posiciones) {
return cadena;
} else {
for(i = 0; i < posiciones.length; i++) {
if(0 != i) posicion_inicial = posiciones[i-1] + subcadena.length();
posicion_final = posiciones[i];
resultado += cadena.substring(posicion_inicial, posicion_final);
}
resultado += cadena.substring(posicion_final + subcadena.length(), cadena.length());

return resultado;
} // del else
}

/**
* Metodo que sustituye una subcadena por otra subcadena, dentro de una cadena
*
* @param cadena Cadena en la que se busca subcadena
* @param subcadena Subcadena a remplasar en la cadena
* @param nueva_subcadena Subcadena que queda en lugar de subcadena
*
* @return Cadena modificada
*/
public static String sustituirSubcadena(String cadena, String subcadena, String nueva_subcadena) {
int[] posiciones = obtenerPosionesSubcadena(cadena, subcadena);
String resultado = "";
int posicion_inicial = 0;
int posicion_final = 0;
int i;

if(null == posiciones) {
return cadena;
} else {
for(i = 0; i < posiciones.length; i++) {
if(0 != i) posicion_inicial = posiciones[i-1] + subcadena.length();
posicion_final = posiciones[i];
resultado += cadena.substring(posicion_inicial, posicion_final) + nueva_subcadena;
}
resultado += cadena.substring(posicion_final + subcadena.length(), cadena.length());

return resultado;
} // del else
}

/**
* Metodo que devuelve el numero de veces que aparece subcadena dentro de cadena
*
* @param cadena Cadena en la que se busca subcadena
* @param subcadena Subcadena que se busca dentro de cadena
*
* @return N&uacute;mero de veces que cadena contiene a subcadena
*/
public static int contarAparicionesSubcadena(String cadena, String subcadena) {
int[] posiciones = obtenerPosionesSubcadena(cadena, subcadena);

if(null == posiciones)
return 0;
else
return posiciones.length;
}

/**
* Metodo que obtiene un vector con las posiciones en las que
* aparece subcadena dentro cadena, si es que aparece.
*
* @param cadena Cadena en la que se busca subcadena
* @param subcadena Subcadena que se busca dentro de cadena
* @return Un vector de enteros con las posiciones dentro de la cadena
* en las que aparece la subcadena. O un <B>null</B> si la
* subcadena no esta contenida en la cadena
*/
public static int[] obtenerPosionesSubcadena(String cadena, String subcadena) {
int[] posiciones = null;
Vector obj_posiciones = new Vector();
int posicion = cadena.indexOf(subcadena);
Integer obj_posicion = null;
int posicion_cad = 0;
int posicion_subc = 0;
int i;

if(-1 != posicion) {
// Guardar las posiciones en las que aparece la subcadena
while(-1 != posicion) {
posicion_cad += posicion + posicion_subc;
obj_posiciones.add( new Integer(posicion_cad) );
cadena = cadena.substring(posicion + subcadena.length());
posicion_subc = subcadena.length();
posicion = cadena.indexOf(subcadena);
}

// Obtener el arreglo de int
posiciones = new int[obj_posiciones.size()];
for(i = 0; i < obj_posiciones.size(); i++) {
obj_posicion = (Integer)obj_posiciones.get(i);
posiciones[i] = obj_posicion.intValue();
}
obj_posiciones = null;
} // del if
return posiciones;
}

/**
* Meto que divede una cadena tomando como separador el parametro token
*
* @param cadena Cadena en la que se busca subcadena
* @param token Subcadena que se busca dentro de cadena
* @return Arreglo que contiene las subcadenas obtenidas de la
* cadena a la que se le elimino token
*/
public static String[] tokenizarCadena(String cadena, String token) {
int[] posiciones = obtenerPosionesSubcadena(cadena, token);
String[] resultados = {cadena};
Vector obj_resultados = new Vector();
int posicion_inicial = 0;
int posicion_final = 0;
String aux;
int i;

if(null == posiciones) {
return resultados;
} else {
for(i = 0; i < posiciones.length; i++) {
if(0 != i) posicion_inicial = posiciones[i-1] + token.length();
posicion_final = posiciones[i];
aux = cadena.substring(posicion_inicial, posicion_final);
if(0 != aux.length()) obj_resultados.add(aux);
}
aux = cadena.substring(posicion_final + token.length(), cadena.length());
if(0 != aux.length()) obj_resultados.add(aux);

resultados = new String[obj_resultados.size()];
for(i = 0; i < obj_resultados.size(); i++) {
resultados[i] = (String)obj_resultados.elementAt(i);
}

return resultados;
} // del else
}

/**
* Comprueba si una cadena puede ser usada para ser convertida en un
* n&uacute;mero.
*
* @param cadena Cadena enviada para comprovar si es un n&uacute;mero
* @return <OL> <LI><B>true</B> - La cadena es un n&uacute;mero</LI>
* <LI><B>false</B> - La cadena NO es un n&uacute;mero</LI> </OL>
*/
public static boolean esNumero(String cadena) {
int num_puntos = 0;

// recorrer la cadena caracter por caracter
for(int i=0; i < cadena.length(); i++) {
switch(cadena.charAt(i)) {
case '0': case '1':
case '2': case '3':
case '4': case '5': // si es un digito entre 0 y 9
case '6': case '7':
case '8': case '9':
break;
case '.':
num_puntos++;
if(num_puntos > 1) { // Si contiene más de 1 punto
return false;
}
break;
default: // si el caracter que se lee no es: un número o un punto
return false;
}
}
return true; // todos los caracteres son digitos entre 0 y 9.
// Y uno o ningun punto.
}
}


... Pues ahí esta...

Espero que de todas formas revises lo del BufferString y algunas otras alternativas. Si no lo revisas... mmmm pues no se, igual y te lleva el coco...

Bueno nos vemos...