Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   Simular el replaceAll (http://www.forosdelweb.com/f45/simular-replaceall-352991/)

lalogrosz 25/11/2005 13:12

Simular el replaceAll
 
Hola. Estoy con la plataforma J2SE 1.3.1 que no tiene el metodo replaceAll, y no puedo encontrar en ningun lado otra manera de hacerlo.

Alguien tiene armado algo que simule este metodo?
Lo necesito con urgencia.

Gracias.

lalogrosz 25/11/2005 13:31

Ya lo encontre.
Lo dejo para que lo usen.

Código:

protected String replaceAll(String object, String target, String replacement, int curIndex) {
          int indexOfMatch = object.indexOf(target, curIndex);
          if (indexOfMatch < curIndex) {
              return object;
          }
          String prefix = "";
          if (indexOfMatch > 0) {
              prefix = object.substring(0, indexOfMatch);
          }
          String tail = object.substring(indexOfMatch + target.length());
          String newObject = prefix + replacement + tail;
          return replaceAll(newObject, target, replacement, indexOfMatch + replacement.length());
}


GreenEyed 25/11/2005 14:47

El metodo puede que funcione, pero es bastante deficiente en cuanto al uso de Strings. Aparte de que hace una comprobacion "if (indexOfMatch > 0)" y si no lo encuentra el resultado es "-1", así que si da un "0" lo ha encontrado al principio de la palabra.... no se, no suena muy fiable.

lalogrosz 25/11/2005 14:49

Asi es como implementa el metodo realmente la plataforma.

Igualmente no se cual es el problema del -1, ya que para encontrar una palabra utiliza el indexof y tiene que devolver 0 por si encuentra en la primera posicion.

GreenEyed 25/11/2005 14:57

Personalmente me gusta más usar StringBuffer, tal que así:
Código:

  static String replace(String original, String replaced, String replacement)
  {
    StringBuffer theSB = new StringBuffer(original);
    int baseIndex = 0;
    int badSignIndex = 0;
    while ((badSignIndex = original.indexOf(replaced, badSignIndex)) != -1)
    {
      theSB.delete(badSignIndex + baseIndex, badSignIndex + baseIndex
          + replaced.length());
      theSB.insert(badSignIndex + baseIndex, replacement);
      baseIndex = baseIndex + replacement.length() - replaced.length();
      badSignIndex = badSignIndex + replaced.length();
    }
    return theSB.toString();
  }


GreenEyed 25/11/2005 15:01

Ese no puede ser el codigo del JDK, puesto que el metodo del JDK recibe como parametro una expresión regular y ese metodo no usa para nada expresiones regulares.
Además de que si así fuera eso habría que fusilar al programador de Sun que introdujo semejante engendro en el JDK oficial ;-)


La zona horaria es GMT -6. Ahora son las 00:42.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.