La chaîne Java ReplaceAll et ReplaceFirst échouent à $ Symbol au remplacement du texte

J'ai écrit ce code:

public static void main(String args[]) throws Exception {
    String template = "The user has spent amount in a day";
    String pattern = "amount";
    String output = template.replaceAll(pattern, "$ 100");
    System.out.println(output);
}

C'est ce qui arrive quand je le lance:

Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
        at java.util.regex.Matcher.appendReplacement(Matcher.java:713)
        at java.util.regex.Matcher.replaceAll(Matcher.java:813)
        at java.lang.String.replaceAll(String.java:2190)
        at demo.BugDemo.main(BugDemo.java:16)
Java Result: 1

Je suis en train de lire des données à partir d'un fichier. Dois-je échapper à toutes $ symboles dans le fichier de données, ou est-ce inutile? Est-il une autre classe ou à la bibliothèque pour gérer cette situation?

Quel est le problème avec le fait d'avoir un symbole spécial dans le texte de remplacement (pas dans la regex)?

Notes:

  • Je ne veux pas de vérifier chaque caractère à s'échapper. C'est pourquoi je suis en posant cette question.
  • Je suis à l'aide de Java 6.

source d'informationauteur kamaci | 2013-01-04