Foro de elhacker.net

Programación => Java => Mensaje iniciado por: ~H~ en 7 Febrero 2014, 20:10 pm



Título: Problema con programa
Publicado por: ~H~ en 7 Febrero 2014, 20:10 pm
El método devuelve por ejemplo si metes unos strings
a = "perryABelCornitorrincoD";
b = "ABCD";

a = "perry[target]AB[endtarget]el[target]C[endtarget]ornitorrinco[target]D[endtarget]


Mete entre [target][endtarget] los que esten contenidos en el segundo String
Mi problema es cuando se repiten, el replace me los suscribe dos o más veces y entonces me sale un disparate, si alguien sabe como se soluciona o si hay otra forma más sencilla...
Gracias


Código
  1. public static String tagger(String a, String b){
  2.        //declaración de strings
  3.        String x1 = "";
  4.        String a1 = "[target]";
  5.        String a2 = "[endtarget]";
  6.        boolean bol = true;
  7.        int n;
  8.  
  9.        //Tenemos que conseguir las subristas de b que aparecen en a
  10.  
  11.        for(int i = 0; i < a.length(); i++){                      
  12.            n = b.indexOf(a.charAt(i));            //posición del caracter de a contenido en b  
  13.            if(n != -1){
  14.            bol = true;
  15.            }
  16.            if(n == -1){
  17.            bol = false;
  18.            }
  19.  
  20.            if(bol){
  21.            x1 = x1 + a.charAt(i);
  22.            }else{
  23.            x1 = x1 + " ";
  24.            }
  25.        }
  26.  
  27.        int w1,n3;
  28.        String aux = "";
  29.        x1 = " " + x1 + " ";                                   //para que siempre encuentra un espacio a la izqda y no se salga de rango
  30.  
  31.        for(int k = 0; k < x1.length(); k++){
  32.            w1 = x1.charAt(k);
  33.  
  34.            if(w1 != ' ' && x1.charAt(k-1) == ' '){            // no es un espacio pero el anterior si es un espacio
  35.                n3 = x1.indexOf(" ",k);                        //busca la posición del próximo espacio
  36.                aux = x1.substring(k,n3);                      
  37.                a = a.replaceFirst(aux,a1+aux+a2);
  38.  
  39.            }
  40.        }
  41.        return a;
  42.    }
  43. }