J'essaie de convertir une équation de RPN en une chaîne correspondant aux règles TIGCC. Les chiffres doivent avoir le nombre de caractères devant eux et une étiquette pour positive ou négative. Pour "2", ce serait "1 2 posint_tag"
Mon entrée complète to RPN Converter est basée sur des regexes, donc je voulais les utiliser à nouveau et avoir une fonction mais là, il imprime simplement: "2 nombre int_tag". J'ai trouvé des classes comme com.stevesoft.pat ( lien ). P> existe un autre manière mise en œuvre dans la normale Sun Java à utiliser (personnalisé) Fonctions dans Remplacer les règles des regexx? P> P> string.replaceall () code> fonctionne comme : p>
3 Réponses :
Non, du moins pas de la même manière que vous le feriez dans C # ou Ruby.
La chose la plus proche est d'écrire une boucle comme celle-ci: P>
static Pattern pattern = Pattern.compile("\\d+");
String convert(String input) {
StringBuffer output = new StringBuffer();
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String rep =
String.format("%d %s POSINT_TAG",
matcher.group().length(),
matcher.group());
matcher.appendReplacement(output, rep);
}
matcher.appendTail(output);
return output.toString();
}
FYI, bien que StringBuilder soit généralement préféré, appendierPlacement () code> et appendtail () code> ne l'accepte pas; Vous devez utiliser Stringbuffer à la place. (StringBuilder n'existait pas encore lorsque la classe de correspondance a été ajoutée, dans JDK 1.4.)
+1 au commentaire - je continue à espérer qu'ils ajoutent une surcharge de ces méthodes pouvant prendre tout appendice code> mais (à partir de la version actuelle Java 8), il n'y a toujours que le Stringbuffer code> version.
Vous pouvez être amusé pour savoir que Cette réponse est citée dans le code source de l'application mobile de pile Overflow pour Android .
Malheureusement, ce que vous essayez ici ne va pas fonctionner. Java utilise l'évaluation d'ordre applicatif Signification selon laquelle les arguments sont évalués avant que la fonction soit appelée. Dans votre cas, vous obtenez la longueur de la chaîne de deux caractères Ainsi, lorsque vous utilisez cette ligne: < / p> Quelle fonction la fonction est: p> comme pour une solution à votre problème, la réponse postée par FINNW fonctionnera . p> p> "1 $ 1" code>, pas le nombre de chiffres qui seront capturés dans le groupe n ° 1.
J'ai une idée du remplacement de chaîne personnalisé en Java. Pas aussi facile que la fonction de remplacement dans JavaScript, mais cela fonctionne simplement bien. Voici le code:
p>
Juste pour le fun.
p> p>
Cela fonctionne parfaitement! J'ai utilisé une interface au lieu de réflexion: github.com/redstone/legacyfactions/blob/...