Aplicar expresiones de reemplazo de sed en Java

Estoy buscando una forma de tomar sedexpresiones de reemplazo, como s/hello/world/(lo que significa reemplazar todas las instancias de 'hola' con 'mundo'), y aplicarlas a una cadena de Java. Idealmente, me gustaría tener soporte para otras sedfunciones, como grupos de captura, etc., pero no son estrictamente necesarias.

¿Hay alguna buena biblioteca para este tipo de cosas en Java?


Podría intentar analizar la expresión sed yo mismo, pero prefiero no meterme en el nido de ratas para escapar.

Respuesta 1

En Java, lo que necesita se logra con el replaceAll()método, provisto como integrado en la clase String:

public String replaceAll(String regex,String replacement)

Documentación

Ejemplo:

String test1 = "hello world";
System.out.println(test1.replaceAll("hello","hi"));
//Output: "hi world"

Capturando grupos en replaceAll:

String test2 = "invert:me";
System.out.println(test2.replaceAll("(.*):(.*)","$2:$1"))
//Output: "me:invert"

nótese bien

  • replaceAll()funciona como una sedoperación de sustitución con /gmodificador global .
  • replaceFirst()funciona exactamente como el método anterior sin el modificador global (reemplace solo la primera aparición)
  • replace()es diferente . ¡ No acepta ninguna cadena literal solo de expresiones regulares!
Respuesta: 2

Acabo de instalar el complemento ecobertura, pero parece que no es una herramienta muy fácil de usar desde dentro de eclipse. ¿hay algún buen complemento para cobertura en eclipse o un artículo para describir cómo usar ecobertura? ...

Quiero generar una cadena JSON en la siguiente estructura usando Jackson API (JsonFactory, JsonGenerator). Cómo puedo hacerlo ? Esperado: {"api": {"Salutaion": "Mr", "name": "X" ...

Si tengo una clase que usa un tipo genérico, como la clase pública Record <T> {valor T privado; Registro público (valor T) {this.value = value; }} es bastante sencillo ...

Estoy ejecutando un programa simple de comparación de patrones exactamente como en test_harness Información: java: Se produjeron errores al compilar el módulo 'demo_java8' Información: se utilizó javac 1.8.0_121 para compilar java ...