2010-08-17 7 views
2

J'essaie de mettre à jour un compte NT stocké (domaine \ utilisateur) avec un nouveau compte. Le nouveau compte est un objet String.Meilleure méthode pour remplacer une chaîne par une chaîne contenant des barres obliques inverses ()

J'appelle ma méthode de replaceAccount pour effectuer cela, en exécutant cette ligne:

tempAcct.setDefinition(ExtractNTAccount.matcher(tempAcct.getDefinition()).replaceFirst("nt=\""+newNTLogin+"\"")); 

Si le compte NT est « HOME \ jdoe », et je puis sortie le champ de définition de tempAcct, je vois le NT Connectez-vous en tant que "HOMEjdoe" à la place.

En cochant la méthode replaceFirst javadoc, ce qui suit peut être lu:

« Notez que antislashs() et dollar signes ($) dans la chaîne de remplacement peuvent entraîner que les résultats soient différents que si elle était traitée comme une chaîne de remplacement littérale;. voir Matcher.replaceFirst (java.lang.String) Utilisez Matcher.quoteReplacement (java.lang.String) pour supprimer la signification spéciale de ces caractères, si voulu."

Donc, j'ai trouvé que si au lieu de passer le compte NT comme il est ("HOME \ jdoe") Je passe "HOME" + Matcher.quoteReplacement ("\\") + "jdoe", ou "HOME \\\\ jdoe", puis j'obtiens des résultats corrects après avoir utilisé la méthode replaceFirst.

Est-ce la meilleure méthode que nous pouvons utiliser ou je ne comprends absolument pas comment utiliser la méthode Matcher.quoteReplacement()?

Répondre

2

L'argument de replaceFirst() est traité comme une expression où $ et \ ont une signification particulière. Si vous voulez qu'il soit traité comme une chaîne littérale à la place, vous le citez avec Matcher.quoteReplacement():

tempAcct.setDefinition(ExtractNTAccount.matcher(
    tempAcct.getDefinition()).replaceFirst(
     Matcher.quoteReplacement("nt=\"" + newNTLogin + "\""))); 
+0

Merci. En fait, je viens de le découvrir. Je l'utilisais au niveau incorrect. – Dan

Questions connexes