2012-08-06 3 views

Répondre

0

utilisation str_in.replace("(\\w+\\s+){0,8}", "");

replace()

remplace chaque sous-chaîne de cette chaîne qui correspond à la séquence cible littérale avec la séquence de remplacement littéral spécifié. Le produit de remplacement depuis le début de la chaîne à la fin, par exemple , en remplaçant « aa » par « b » dans la chaîne « aaa » entraînera « ba ​​» plutôt que « ab »

replaceAll()

remplace chaque sous-chaîne de cette chaîne qui correspond à l'expression régulière avec le remplacement donné

+2

'" (\\ w + \\ s +) {0,8} "' et '" "' ne sont pas 'char'. – oldrinb

+1

Mis à jour, j'ai pris la mauvaise description de la méthode. Ça devrait être une séquence. – kosa

0

Voulez-vous dire que (\\w+\\s+){0,8} est littéralement dans les s tring, et vous voulez l'enlever? Vous aurez besoin d'échapper à nouveau \ dans votre replaceAll, afin qu'ils soient interprétés littéralement, pas dans le cadre d'une regex, et aussi les ( et {.

1

Vous aurez besoin d'échapper aux caractères uniques afin qu'ils perdent leur nature regex:

str_in.replaceAll("\\(\\\\w\\+\\\\s\\+\\)\\{0,8\\}", "") 

Chaque backslash doit être échappé pour lui-même à cause de la chaîne littérale.

1

Si vous, comme vos états de question, je veux vraiment utiliser replaceAll() au lieu de (à mon avis plus approprié) replace(), vous pouvez utiliser les \Q et \E marqueurs pour correspondre à la chaîne littéralement:

String str_in = "instance (\\w+\\s+){0,8}deleted"; 
System.out.println(str_in.replaceAll("\\Q(\\w+\\s+){0,8}\\E", "")); 

affiche

instance deleted 
+0

Une réponse raisonnable et correcte. Sinon, la regex devient: '\\ (\\\\ w \\ + \\\\ s \\ +) \\ {0,8 \\}'. D'autres réponses négligent d'échapper au '+' – pb2q