Devo sostituire una parola in una stringa simile a "duh duh qualcos'altro". Ho solo bisogno di sostituire il secondo "duh", ma il primo e l'ultimo devono rimanere intatti, quindi replace() e replaceFirst() non funzionano. Esiste un metodo come replaceFirst (String regex, String replacement, int offset) che sostituisce la prima occorrenza di sostituzione a partire dall'offset, o forse consiglieresti un altro modo per risolvere questo problema? Grazie!Java String.replaceFirst() che accetta un argomento "a partire da"
risposta
Che dire qualcosa di simile:
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);
solo 1 riga di codice ... non è un metodo complesso.
Qualcosa come questo funziona?
System.out.println(
"1 duh 2 duh duh 3 duh"
.replaceFirst("(duh.*?)duh", "$1bleh")
); // prints "1 duh 2 bleh duh 3 duh"
Se si desidera solo per sostituire la seconda occorrenza di un modello in una stringa, davvero non hanno bisogno di questo "a partire da" calcolo degli indici.
Come bonus, se si desidera sostituire ogni altro duh
(vale a dire secondo, quarto, sesto, ecc.), Quindi basta chiamare replaceAll
anziché replaceFirst
.
replaceAll non sostituirà tutti gli altri duh, poiché non si riavvia dall'inizio ogni volta. In realtà darà 1duh2blehduh3bleh –
Che sta sostituendo ogni altro 'duh' come ho detto! – polygenelubricants
"È marmellata un giorno sì e uno no, oggi non è nessun altro giorno, lo sai." –
Un'alternativa utilizzando 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. Alternativa a BackgroundWorker che accetta più di un argomento?
- 2. A partire da Gradle
- 3. Come creare un Rails 4 Preoccupazione che accetta un argomento
- 4. Eclipse interrotto a caso a partire da
- 5. Creare un puntatore a funzione che accetta un puntatore a funzione come argomento
- 6. A partire da Android: Java o Python (SL4A)
- 7. eccezione di applicazione a partire Primavera da Java
- 8. Indirizzamento di matrice a partire da un numero non 0
- 9. Una classe non generica accetta un argomento generico nel costruttore
- 10. Come posso digitare un puntatore a funzione che accetta una funzione del proprio tipo come argomento?
- 11. Scrivere una funzione che accetta un'espressione lambda come argomento
- 12. each_with_index_do a partire da 1 per l'indice
- 13. a partire da GTK + su Ubuntu
- 14. Come chiamare un metodo Java da C++/JNI che accetta un parametro Android Contesto
- 15. Scegliere un file a partire da una data stringa
- 16. ciclo attraverso la lista a partire da un certo elemento
- 17. Come chiamare la funzione che accetta un argomento in un modello Django?
- 18. Errore con ToString non ha un metodo che accetta un argomento in C#
- 19. Perché la funzione requestAnimationFrame accetta un elemento come argomento?
- 20. Una funzione python che accetta come argomento un array scalare o numpy
- 21. Javascript - Imposta la data da 30 giorni a partire da
- 22. Karma si blocca a Karma a partire da
- 23. Come creare un metodo che accetta le stringhe con il formato direttamente come argomento?
- 24. Come creare passabile da C# in delegato C++ che accetta un oggetto IEnumerable come argomento con SWIG?
- 25. Come dichiarare una funzione che accetta un lambda?
- 26. partire risultati Eclipse a Impossibile creare Java Virtual Machine
- 27. Riferimento a un argomento del costruttore da un tratto
- 28. Hadoop che accetta i file di input da più directory
- 29. Ruby: classe che accetta un blocco?
- 30. Passare una classe come argomento a un metodo in java
Ok, questo è esattamente quello di cui avevo bisogno, grazie! – Slavko