Necesito reemplazar una palabra en una cadena que parezca "duh duh something else duh". Solo necesito reemplazar el segundo "duh", pero el primero y el último deben permanecer intactos, así que replace() y replaceFirst() no funcionan. ¿Hay algún método como replaceFirst (String regex, String replacement, int offset) que reemplace la primera aparición de reemplazo a partir de la compensación, o tal vez recomendaría otra forma de resolverlo? Gracias!Java String.replaceFirst() que toma el argumento "starting from"
Respuesta
¿Qué pasa algo como esto:
String replaceFirstFrom(String str, int from, String regex, String replacement)
{
String prefix = str.substring(0, from);
String rest = str.substring(from);
rest = rest.replaceFirst(regex, replacement);
return prefix+rest;
}
// or
s.substring(0,start) + s.substring(start).replaceFirst(search, replace);
sólo 1 línea de código ... no es un método conjunto.
¿Funcionará algo como esto?
System.out.println(
"1 duh 2 duh duh 3 duh"
.replaceFirst("(duh.*?)duh", "$1bleh")
); // prints "1 duh 2 bleh duh 3 duh"
Si lo que desea es reemplazar la segunda aparición de un patrón en una cadena, que realmente no necesito esto "a partir de" cálculo del índice.
Como una ventaja, si quiere reemplazar a cualquier otro duh
(es decir, segundo, cuarto, sexto, etc.), simplemente invoque replaceAll
en lugar de replaceFirst
.
replaceAll no reemplazará a todos los demás duhs, ya que no se reiniciará siempre desde el principio. Realmente dará 1duh2blehduh3bleh –
que está reemplazando a todos los demás 'duh' como dije! – polygenelubricants
"Es un día alterno, hoy no es otro día, ya sabes". –
Una alternativa usando Matcher:
String input = "duh duh something else duh";
Pattern p = Pattern.compile("duh");
Matcher m = p.matcher(input);
int startIndex = 4;
String output;
if (m.find(startIndex)) {
StringBuffer sb = new StringBuffer();
m.appendReplacement(sb, "dog");
m.appendTail(sb);
output = sb.toString();
} else {
output = input;
}
- 1. ¿Qué función no toma ningún argumento?
- 2. Building java from MSBuild
- 3. Usando bind1st por un método que toma el argumento por referencia
- 4. P/Función de invocación que toma el puntero a struct
- 5. Starting Spring <tasks: scheduled-tasks>
- 6. Crear un puntero a la función que toma un puntero a la función como argumento
- 7. Java's String.replace() vs. String.replaceFirst() vs. homebrew
- 8. String.Format() toma una matriz como un solo argumento
- 9. pitón: función toma exactamente 1 argumento (2 da)
- 10. ¿Se puede aplicar parcialmente el segundo argumento de una función que no toma argumentos de palabra clave?
- 11. ¿Cómo llamar a la función que toma un argumento en una plantilla de Django?
- 12. argumento de Java -server
- 13. Por qué Java OutputStream.write() Toma de enteros pero escribe Bytes
- 14. Java Regex lookahead toma demasiado tiempo
- 15. cuánta memoria toma un hilo en java
- 16. Función Haskell que toma una función variada como argumento (y devuelve algo más que ese func) sin FlexibleInstances, puro Haskell2010
- 17. ¿Cómo funciona el argumento que pasa?
- 18. FUELCMS (codeigniter) htaccess: orden toma un argumento, 'permitir, denegar', 'denegar, permitir', error
- 19. ¿Algún compilador que toma 'char' como 'unsigned'?
- 20. función que toma la dirección() y da el valor
- 21. generate_n con el constructor que toma dos argumentos
- 22. ¿Seguir el tiempo que toma un comando en UNIX/LINUX?
- 23. pseudo_encrypt() función en plpgsql que toma bigint
- 24. GEdit - highlight starting tag - tag final del HTML seleccionado?
- 25. Scala: ¿Por qué Seq.contains toma un argumento Any, en lugar de un argumento del tipo de secuencia?
- 26. StructureMap, constructor que toma una lista de plugins
- 27. omisión de Linq, toma
- 28. ¿Cómo puedo agregar propiedades a una clase usando un decorador que toma una lista de nombres como argumento?
- 29. ¿Pasar el argumento a un constructor estático en Java?
- 30. ¿Cómo puedo escribir un puntero de función que toma una función de su propio tipo como argumento?
Ok, esto es exactamente lo que necesitaba, ¡gracias! – Slavko