2013-05-22 6 views
40

Supponendo che ho una stringa string come questo:come sostituire una sottostringa di una stringa

"abcd=0; efgh=1" 

e voglio sostituire "ABCD" con "dddd". Ho provato a fare una cosa del genere:

Non funziona. Eventuali suggerimenti?

MODIFICA: Per essere più specifici, sto lavorando in Java e sto cercando di analizzare il documento HTML, concretamente il contenuto tra i tag <script>. Ho già trovato un modo come analizzare il contenuto in una stringa:

if(tag instanceof ScriptTag){ 
     if(((ScriptTag) tag).getStringText().contains("DataVideo")){ 
      String tagText = ((ScriptTag)tag).getStringText(); 
     } 
} 

ora devo trovare un modo come sostituire una stringa con un'altra.

+2

Puoi essere più specifico di "non funziona?" Prima di tutto, che linguaggio è questo? Hai un errore? Succede qualcosa di inaspettato? Cosa stai cercando di ottenere in generale? –

risposta

4

Con regex Credo che questo sia Java, il metodo replaceAll() restituisce una nuova stringa con il sottostringhe sostituiti, in modo da provare questo:

String teste = "abcd=0; efgh=1"; 

String teste2 = teste.replaceAll("abcd", "dddd"); 

System.out.println(teste2); 

uscita:

dddd=0; efgh=1 
+0

Più uno per la risposta originale. – HoldOffHunger

0

in JavaScript:

var str = "abcdaaaaaabcdaabbccddabcd"; 
document.write(str.replace(/(abcd)/g,"----")); 
//example output: ----aaaaa----aabbccdd---- 

In altre lingue, sarebbe qualcosa di simile. Ricorda di abilitare le partite globali.

0

Probabilmente non lo si sta assegnando dopo aver sostituito o sostituito la cosa sbagliata. Prova:

String haystack = "abcd=0; efgh=1"; 
String result = haystack.replaceAll("abcd","dddd"); 
57

È necessario utilizzare valore di ritorno di replaceAll() metodo. replaceAll() non sostituisce i caratteri nella stringa corrente, restituisce una nuova stringa con la sostituzione.

  • oggetti String sono immutabili, i loro valori non possono essere cambiati dopo la loro creazione.
  • È possibile utilizzare replace() invece di replaceAll() se non è necessario regex.
String str = "abcd=0; efgh=1"; 
    String replacedStr = str.replaceAll("abcd", "dddd"); 

    System.out.println(str); 
    System.out.println(replacedStr); 

uscite

abcd=0; efgh=1 
dddd=0; efgh=1 
+0

Nota che replaceAll prevede un'espressione regolare. Sostituisci gli spazi vuoti, "()", produrrà un errore regex, finché non eseguirai l'escape corretto: str.replaceAll ("\\\ (\\\)", ""); – HoldOffHunger

9

2 cose che si dovrebbe notare:

  1. stringhe in Java sono immutabili a cui è necessario memorizzare il valore di ritorno del metodo di thereplace chiamata in un altro Stringa.
  2. Non hai davvero bisogno di un'espressione regolare qui, solo una semplice chiamata a String#replace(String) farà il lavoro.

Quindi, solo di questo codice:

String replaced = string.replace("abcd", "dddd"); 
8

È necessario creare la variabile per assegnare il nuovo valore, come questo:

String str = string.replaceAll("abcd","dddd"); 
2

Si noti che le barre rovesciate (\) e dollaro i segni ($) nella stringa di sostituzione potrebbero causare risultati diversi rispetto a se fossero trattati come una stringa di sostituzione letterale; vedi Matcher.replaceAll. Utilizzare java.util.regex.Matcher.quoteReplacement per sopprimere il significato speciale di questi caratteri, se lo si desidera.

da javadoc.