Ich muss ein Wort in einer Zeichenfolge wie "duh duh etwas anderes duh" ersetzen. Ich muss nur das zweite "duh" ersetzen, aber das erste und das letzte müssen unberührt bleiben, also funktionieren replace() und replaceFirst() nicht. Gibt es eine Methode wie replaceFirst (String regex, Ersetzen von Zeichenfolgen, int offset), die das erste Auftreten von Ersetzungen ab Offset ersetzen würde, oder würden Sie vielleicht eine andere Möglichkeit zur Lösung dieses Problems empfehlen? Danke!Java String.replaceFirst(), das ein "Start von" Argument
Antwort
Was ist so etwas wie dieses:
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);
nur 1 Zeile Code ... nicht eine ganze Methode.
Funktioniert so etwas?
System.out.println(
"1 duh 2 duh duh 3 duh"
.replaceFirst("(duh.*?)duh", "$1bleh")
); // prints "1 duh 2 bleh duh 3 duh"
Wenn Sie nur das zweite Auftreten eines Musters in einer Zeichenfolge ersetzen möchten, was Sie wirklich brauchen nicht diese Indexberechnung „von Start“.
Als Bonus, wenn Sie alle anderen duh
(d. H. Zweiten, vierten, sechsten usw.) ersetzen möchten, rufen Sie einfach replaceAll
anstelle von replaceFirst
.
replaceAll ersetzt nicht alle anderen duhs, da es nicht jedes Mal von Anfang an neu gestartet wird. Es wird tatsächlich geben 1duh2blehduh3bleh –
Welches ersetzt jedes andere 'duh' wie ich schon sagte! – polygenelubricants
"Es ist jeden zweiten Tag Marmelade; heute ist kein anderer Tag, weißt du." –
Eine Alternative mit 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. Start Cygwin-Prozess von Java
- 2. Gibt es ein .NET-Äquivalent von Java Web Start?
- 3. Java Web Start Alternative
- 4. Java: Wie man Unterklassen fordert, um super() aufzurufen, wenn das Argument von super ein vararg ist
- 5. Arbitrary Java enum Argument
- 6. Kombination von Launch4J und Java Web Start?
- 7. Ein Argument von zwei. Entweder
- 8. Java Web Start JAVA_HOME
- 9. Marathon Start Java-Programm
- 10. Start Timer in Java
- 11. Start Datei Fehler in Java Web Start
- 12. bash: das Verzeichnis Argument
- 13. Java -Server Argument
- 14. Leckt das Argument-Objekt?
- 15. Java Befehlszeile Argument mit „=“
- 16. Das Argument context_instance von render_to_string ist veraltet
- 17. Übergabe von NULL an das Argument Methode
- 18. Wie ein Prädikat als Funktion Argument
- 19. Wie übergebe ich eine Java-Funktion ein String [] Argument?
- 20. Java-Argument zur Angabe von Java.Security-Datei für JVM
- 21. Wie ein Shell-Argument von der cli
- 22. ein Argument von R Rückkehr bash
- 23. Web Start JNLP Web Start von javascript oder jquery
- 24. Fragen über das Format für ein bestimmtes Argument
- 25. Hat Java ein Schlüsselwort "das"
- 26. Überprüfen, ob das Argument für ein Programm leer ist?
- 27. Java Web Start kann nicht
- 28. Java Unzulässiger Start des Typfehlers
- 29. Nichts passiert nach dem Start einer Java Web Start App
- 30. Vorlage ein shared_ptr Argument
Ok, das ist genau das, was ich brauchte, danke! – Slavko