2016-11-18 25 views
5

Próbuję zastąpić znaki specjalne w pliku wzorcem zawierającym tylko znaki specjalne, ale wygląda na to, że nie działa.Java zastępuje znaki specjalne

Jednak po uruchomieniu otrzymuję oryginalny ciąg zamiast zastępowanego ciągu. Co ja robię źle?

+0

Czy próbujesz wykonać interpolację ciągów lub przykład wygląda tak? Jeśli tak, spójrz na [MessageFormat] (https://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html) –

Odpowiedz

7

Wystarczy użyć String#replace(CharSequence target, CharSequence replacement) w przypadku zastąpienia danego CharSequence, jak obok:

special = special.replace("@$", "as"); 

Albo użyć Pattern.quote(String s) do konwertowania String w dosłownym wzór String, jako następny:

special = special.replaceAll(Pattern.quote("@$"), "as"); 

Jeśli masz zamiar robić to bardzo często, rozważ ponowne użycie odpowiedniej instancji Pattern (klasa Pattern jest wątkowo bezpieczna, co oznacza, że ​​możesz udostępniać wystąpienia tej klasy), aby uniknąć kompilacji wyrażenia regularnego przy każdym połączeniu, którego cena jest równa termin występów.

więc kod może być:

private static final Pattern PATTERN = Pattern.compile("@$", Pattern.LITERAL); 
... 
special = PATTERN.matcher(special).replaceAll("as"); 
5

ewakuacyjne znaki: -

String special = "Something @$ great @$ that."; 
    special = special.replaceAll("@\\$", "as"); 
    System.out.println(special); 

Na wyrażenie regularne poniżej 12 znaków zarezerwowane są nazywane jako metaznaki. Jeśli chcesz użyć dowolnego z tych znaków jako literału w wyrażeniu regularnym, musisz uciec przed nimi za pomocą ukośnika odwrotnego.

the backslash \ 
the caret^
the dollar sign $ 
the period or dot . 
the vertical bar or pipe symbol | 
the question mark ? 
the asterisk or star * 
the plus sign + 
the opening parenthesis (
the closing parenthesis) 
the opening square bracket [ 
and the opening curly brace { 

referencje: - http://www.regular-expressions.info/characters.html

0

Zauważ, że pierwszy dany parametr nie jest ciągiem chcesz zastąpić. Jest to wyrażenie regularne. Możesz spróbować zbudować wyrażenie regularne pasujące do ciągu znaków, który chcesz zastąpić on this site.

special = special.replaceAll("\\@\\$", "as"); będzie działać, jak sugeruje @Mritunjay

0
special = special.replaceAll("\\W","as"); 

współpracuje ze wszystkimi znaki specjalne.