2010-07-24 11 views
2

Je ne peux pas utiliser le fabuleux tr() pour le moment car je ne peux utiliser que Groovy 1.7.1 et je voulais savoir s'il y avait une manière élégante d'aller et venir entre la chaîne et le nombre encodé avec Base32 , mais avec les valeurs A à Z alors 2 à 7, plutôt que 0 à 9 alors A à V.Groovy Base32 conversions

Ceci permet de supprimer l'erreur du client en tapant un code lisible par un humain en n'utilisant pas zéro ou un.

je peux penser à 72 expressions Regex qui permettraient, mais cela semble exagéré quand

tr('A-Z2-7', 0-9A-V') 

est beaucoup plus facile

Répondre

4

La beauté de Groovy est sa nature dynamique. Si vous avez besoin de la fonctionnalité, mais ce n'est pas là, ajoutez-le! Quelque part dans un point d'entrée pratique pour votre application ou dans un bloc statique dans la classe qui en a besoin, ajoutez le code soulevé directement à partir des sources 1.7.3+:

String.metaClass.'static'.tr = { String text, String source, String replacement -> 
    if (!text || !source) { return text } 
    source = expandHyphen(source) 
    replacement = expandHyphen(replacement) 

    // padding replacement with a last character, if necessary 
    replacement = replacement.padRight(source.size(), replacement[replacement.size() - 1]) 

    return text.collect { original -> 
     if (source.contains(original)) { 
      replacement[source.lastIndexOf(original)] 
     } else { 
      original 
     } 
    }.join() 
} 


String.metaClass.'static'.expandHyphen = { String text -> 
    if (!text.contains('-')) { return text } 
    return text.replaceAll(/(.)-(.)/, { all, begin, end -> (begin..end).join() }) 
} 

String.metaClass.tr = { String source, String replacement -> 
    String.tr(delegate, source, replacement) 
} 

La bonne chose à ce sujet est à chaque fois que vous peut mettre à jour à 1.7.3, vous pouvez simplement supprimer cette méta-magie et vous n'aurez pas besoin de changer vos autres sources.

+0

Delphyne, qui démontre la beauté de pourquoi plus de têtes valent mieux qu'une. Je suis encore un peu nouveau chez Groovy, que j'utilise chez Filemaker, et je ne faisais que regarder cela sur une seule avenue, et bien sûr, ça marche. Je dois devenir plus au fait des docs et du code source. BEAUCOUP merci de votre contribution. –

+0

Où dois-je aller pour jeter un coup d'oeil à la source afin que je puisse commencer à étendre mon apprentissage? –

+0

Les sources peuvent être téléchargées à côté des fichiers binaires [1]. L'astuce est qu'il peut être non évident de comprendre où les choses sont mises en œuvre. Dans le code que j'ai posté ci-dessus, les méthodes statiques 'tr' et 'expandHyphen' existent dans une classe appelée StringUtils, tandis que la méthode 'tr' d'instance existe dans DefaultGroovyMethods. [1] http://groovy.codehaus.org/Télécharger –