2011-06-21 7 views
0

J'ai des chaînes comme:Quelle est la meilleure façon de manipuler la chaîne suivante?

"{0}_something_{1}-{2}-something" 

et je dois convertir ces chaînes pour

"%s_something_%s-%s-something" 

quelle est la meilleure façon de le faire?

+0

Ce qui est ici la logique? Quand ajouter un trait de soulignement? – Fortega

+0

aucune logique dans les traits de soulignement. seulement en remplaçant tous les {0}, {1} avec% s. J'ai oublié le string.replce est avec regex. J'ai ma réponse ici. merci – AAaa

+1

puis remplacez votre exemple par "Comment devrais-je remplacer toutes les instances de {0} ... {1} ..." et etc. par "% s" – mre

Répondre

4

J'utiliserais une expression rationnelle.

String data = "{0}something{1}-{2}-something"; 
System.out.println(data.replaceAll("\\{.*?\\}", "%s_")); 

Sortie:

%s_something%s_-%s_-something

Edit: Une expression rationnelle qui remplace seulement s'il n'y a que des chiffres entre { et }

System.out.println(data.replaceAll("\\{\\d+\\}", "%s_")); 
+0

@dan: Attention, cette solution laissera "-c" en place.En outre, elle ne correspondra pas seulement aux chiffres entre les accolades, mais tout Jetez un oeil à ma réponse pour une solution testée complète – Shef

+0

@Shef L'exemple que dan posté a toujours '-' dans la sortie, c'est pourquoi je n'essaie pas de le supprimer. qui ne correspond que s'il y a des chiffres entre '{}' – Kaj

+0

Oui, cela ne correspondra qu'aux chiffres Ok, s'il veut toujours le '-', c'est ce qu'il veut.;) Bon travail – Shef

6
myString.replaceAll("\\{\\d\\}", "%s") 

Si vous essayez à creat e une chaîne de format Java, alors vous devriez probablement conserver l'ordre de ces remplacements, sinon des chaînes comme foo {2} bar {1} baz {0} vont poser des problèmes:

myString.replaceAll("\\{(\\d)\\}", "%$1$$s"); 
+0

Cette regexp ne remplace pas ce que il veut remplacer – Kaj

+0

Huh? Il dit qu'il veut cette sortie «% s_quelque chose_% s-% s-quelque chose» mon expression rationnelle produit cette sortie. – Kaj

+0

merci. mais vous avez besoin de "\\" avant le "{". sinon vous obtenez PatternSyntaxException: répétition illégale. – AAaa

1
String result = MessageFormat.format("{0}something{1}-{2}-something", "%s_", "_%s", "%s"); 
1
String str  = "{0}something{1}-{2}-something"; 
String clean = str.replaceAll("(\\{\\d+\\}-?)", "%s_"); 
System.out.println(clean); // outputs: %s_something%s_%s_something 
Questions connexes