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?
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?
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");
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
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
Metoda replaceAll akceptuje regex jako wzorzec do podstawniki,: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String)
Spróbuj po prostu:
special = special.replace("@$", "as");
special = special.replaceAll("\\W","as");
współpracuje ze wszystkimi znaki specjalne.
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) –