2013-05-22 22 views
40

Zakładając Mam String string tak:Jak zastąpić podciąg napisu

"abcd=0; efgh=1" 

i chcę zastąpić "abcd" przez "dddd". Próbowałem zrobić coś takiego:

string.replaceAll("abcd","dddd"); 

To nie działa. Jakieś sugestie?

EDYTOWANIE: Aby być bardziej szczegółowym, pracuję w Javie i próbuję przeanalizować dokument HTML, konkretnie zawartość między tagami <script>. Mam już znaleźli sposób, jak analizować zawartość na ciąg znaków:

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

Teraz muszę znaleźć sposób, jak zastąpić jeden podciąg przez inną.

+2

Czy możesz być bardziej konkretny niż "to nie działa?" Po pierwsze, jaki to jest język? Czy otrzymujesz błąd? Czy dzieje się coś nieoczekiwanego? Co ogólnie chcesz osiągnąć? –

Odpowiedz

4

Przez regex myślę, że to jest Java, metoda replaceAll() zwraca nowy ciąg z podciągów zastąpionych, więc spróbuj tego:

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

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

System.out.println(teste2); 

wyjściowa:

dddd=0; efgh=1 
+0

Plus jeden za oryginalną odpowiedź. – HoldOffHunger

0

w JavaScript:

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

W innych językach byłoby to coś podobnego. Pamiętaj, aby włączyć dopasowania globalne.

0

Prawdopodobnie nie przypisujesz go po wymianie lub zastąpieniu niewłaściwej rzeczy. Spróbuj:

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

Trzeba użyć wartości zwracanej replaceAll() metody. replaceAll() nie zastępuje znaków w bieżącym łańcuchu, zwraca nowy ciąg z zamiennikiem.

  • obiekty String są niezmienne, ich wartości nie można zmienić po ich utworzeniu.
  • Możesz użyć replace() zamiast replaceAll(), jeśli nie potrzebujesz wyrażeń regularnych.
String str = "abcd=0; efgh=1"; 
    String replacedStr = str.replaceAll("abcd", "dddd"); 

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

wyjścia

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

Należy zauważyć, że replaceAll oczekuje wyrażenia regularnego. Zamień puste parens, "()", wytworzy błąd regex, dopóki nie wykonasz odpowiedniego escaping: str.replaceAll ("\\\ (\\\)", ""); – HoldOffHunger

9

2 rzeczy, które warto zwrócić uwagę:

  1. Ciągi w Javie są niezmienne do więc trzeba przechowywać wartości zwracanej metoda thereplace rozmowy w innym Strunowy.
  2. Nie potrzebujesz tutaj wyrażeń regularnych, wystarczy wykonać proste połączenie z String#replace(String).

Więc po prostu użyć tego kodu:

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

Musisz utworzyć zmienną, aby przypisać nową wartość, na przykład:

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

Zauważ, że ukośniki (\) i dolara znaki ($) w łańcuchu zamiennym mogą powodować, że wyniki będą inne niż gdyby traktowano je jako literowy ciąg zastępczy; zobacz Matcher.replaceAll. Użyj java.util.regex.Matcher.quoteReplacement, aby ukryć specjalne znaczenie tych znaków, jeśli chcesz.

z javadoc.

Powiązane problemy