// Clase GenericTokenParser public class ProcesadorMarcadores { private final String inicioMarcador; private final String finMarcador; private final ManejadorMarcadores manejador;
public ProcesadorMarcadores(String inicioMarcador, String finMarcador, ManejadorMarcadores manejador) {
this.inicioMarcador = inicioMarcador;
this.finMarcador = finMarcador;
this.manejador = manejador;
}
public String analizar(String texto) {
StringBuilder resultado = new StringBuilder();
if (texto != null && !texto.isEmpty()) {
char[] fuente = texto.toCharArray();
int posicion = 0;
int inicio = texto.indexOf(inicioMarcador, posicion);
while (inicio > -1) {
if (inicio > 0 && fuente[inicio - 1] == '\\') {
resultado.append(fuente, posicion, inicio - posicion - 1).append(inicioMarcador);
posicion = inicio + inicioMarcador.length();
} else {
int fin = texto.indexOf(finMarcador, inicio);
if (fin == -1) {
resultado.append(fuente, posicion, fuente.length - posicion);
posicion = fuente.length;
} else {
resultado.append(fuente, posicion, inicio - posicion);
posicion = inicio + inicioMarcador.length();
String contenido = new String(fuente, posicion, fin - posicion);
resultado.append(manejador.procesar(contenido));
posicion = fin + finMarcador.length();
}
}
inicio = texto.indexOf(inicioMarcador, posicion);
}
if (posicion < fuente.length) {
resultado.append(fuente, posicion, fuente.length - posicion);
}
}
return resultado.toString();
}
}
</div>Este método analiza los marcadores dentro de una cadena dada, extrayendo subcadenas entre pares de marcadores de inicio y fin, y delegando su procesamiento al manejador asignado. 3. Manejador de Marcadores La interfaz ManejadorMarcadores define cómo deben ser tratados los marcadores extraídos por el procesador. Aquí está su definición: <div>```
public interface ManejadorMarcadores {
String procesar(String contenido);
}
import java.util.Properties;
public class AnalizadorPropiedades { private AnalizadorPropiedades() {}
public static String analizar(String cadena, Properties propiedades) {
ManejadorVariable manejador = new ManejadorVariable(propiedades);
ProcesadorMarcadores analizador = new ProcesadorMarcadores("${", "}", manejador);
return analizador.analizar(cadena);
}
private static class ManejadorVariable implements ManejadorMarcadores {
private Properties propiedades;
public ManejadorVariable(Properties propiedades) {
this.propiedades = propiedades;
}
@Override
public String procesar(String clave) {
if (propiedades.containsKey(clave)) {
return propiedades.getProperty(clave);
}
return "${" + clave + "}";
}
}
}
</div>Este ejemplo muestra cómo se pueden reemplazar marcadores con valores específicos desde un archivo de propiedades.</div>