Transformer un int en String d'une taille spécifique - Java - Programmation
Marsh Posté le 08-11-2004 à 17:27:29
aurel a écrit : J'ai besoin de transformer un int en String, mais avec une taille de la String bien précise. |
essaie ce code pour voir (je n'ai pas testé)
Code :
|
cet algo suppose que la longueur de la chaine a formater est toujours inférieure a la longueur spécifiee et de ce fait ne traite pas le cas ou la longueur de la chaine à transformer est superieure a la longuer spécifier.
je n'ai pas testé mais ça ne doit pas etre loin de ça
Marsh Posté le 08-11-2004 à 18:08:30
ça marche pas ce truc là ou quoi
j'ai pas testé mais je pensais que la concatenation pouvait se faire directemenet sans avoir a creer un string.
Marsh Posté le 08-11-2004 à 18:21:08
axk47 a écrit : ça marche pas ce truc là ou quoi |
Ca dans une boucle, c'est moins qu'optimal.
Marsh Posté le 08-11-2004 à 18:30:05
ouep, il vaut bien mieux utiliser StringBuffer ou StringBuilder si tu es déjà passé en java1.5
Marsh Posté le 08-11-2004 à 23:10:29
ReplyMarsh Posté le 09-11-2004 à 00:20:32
the real moins moins a écrit : NumberFormat .. |
ouais mais là c'est trop facile
Marsh Posté le 09-11-2004 à 00:23:55
ReplyMarsh Posté le 09-11-2004 à 09:45:59
sircam a écrit : Ca dans une boucle, c'est moins qu'optimal. |
ouai mais il cherche une idée. Il n'a précisé qu'il voulait une solution optimale.
mais toi comment tu fais.
tu preferes une version recursive peut etre qui je trouve moins optimale que celle itérative!
Marsh Posté le 09-11-2004 à 09:59:58
mais nan, c'est juste qu'il faut jamais utilser la concaténation de chaines dans une boucle. Ca créé plein d'objets inutiles !
Marsh Posté le 09-11-2004 à 10:02:55
Oui, c'est pas parce qu'on a pas demandé une version optimale qui faut sortir un truc... pas très optimal. Disons qu'il est de bonne pratique d'éviter des concaténations de chaînes dans des boucles.
Sinon, la prochaine fois qu'on me demande une méthode de tri sans autres précisions, je réponds random sort
Marsh Posté le 09-11-2004 à 10:26:44
benou a écrit : mais nan, c'est juste qu'il faut jamais utilser la concaténation de chaines dans une boucle. Ca créé plein d'objets inutiles ! |
merci benou je me souviendrai le jour où j'aurai besoin d'écrire du code optimisé.
Marsh Posté le 09-11-2004 à 10:46:52
benou a écrit : mais nan, c'est juste qu'il faut jamais utilser la concaténation de chaines dans une boucle. Ca créé plein d'objets inutiles ! |
bah, encore, les chaines c'est loin d'etre le pire tu connais pas Les Dessous Des Strings toi
Marsh Posté le 09-11-2004 à 17:18:55
the real moins moins a écrit : bah, encore, les chaines c'est loin d'etre le pire tu connais pas Les Dessous Des Strings toi |
si ... merci ...
y a une vanne que je comprends pas
Marsh Posté le 09-11-2004 à 17:19:46
axk47 a écrit : merci benou je me souviendrai le jour où j'aurai besoin d'écrire du code optimisé. |
rien à voir avec du code optimal ! le truc que tu fais sur des boucles un peu longue, ca te détruit complétement tes perfs ! fait le test toi même ...
Marsh Posté le 09-11-2004 à 17:20:01
ben non
mais c'est moins "grave" pour des String que pour des objets mutables qui n'ont pas ce machin de sharing qu'ont les String
Marsh Posté le 09-11-2004 à 18:07:47
D'ailleurs, y a t-il d'autres classes que les String qui sont immutables ?
Marsh Posté le 09-11-2004 à 19:09:32
the real moins moins a écrit : ben non |
ha ouais ? et sur quel autre objet tu peux utiliser l'opérateur '+' ?
Marsh Posté le 09-11-2004 à 19:22:20
bon, j'admets, j'ai pas suivi.
(ct juste pour relever que "creer" des instances de string, c'etait pê moins mortel que creer des instances d'autre chose )
Marsh Posté le 09-11-2004 à 19:27:55
the real moins moins a écrit : bon, j'admets, j'ai pas suivi. |
t'as voulu faire le kéké, ouais
et ca dépend de la façon dont elle est crée ...
en l'occurence, là c'est des chaines qui sont appendées dans un StringBuffer => le cache String et le partage de tableau de chars ne s'appliquent pas ...
Marsh Posté le 09-11-2004 à 20:05:06
Minute, ce truc de '+' avec les Sting, ça confine au cas pathologique. Un relent de surcharge d'opérateur. C'est assez malsain.
Marsh Posté le 09-11-2004 à 20:39:12
Je pense qu'on peut encore optimiser la solution suivante
Code :
|
Marsh Posté le 09-11-2004 à 20:44:41
2 problèmes:
1. quid si diff<=0 ?
2. Ton tableau "zeros" ne sert à rien, tu peux directement faire des appends de char sur le StringBuffer, ça ira aussi vite à mon humble avis.
Marsh Posté le 09-11-2004 à 20:56:32
sircam a écrit : Minute, ce truc de '+' avec les Sting, ça confine au cas pathologique. Un relent de surcharge d'opérateur. C'est assez malsain. |
c'est à dire ?
Marsh Posté le 10-11-2004 à 10:52:51
Lam's a écrit : 2 problèmes: |
Oui. Il est vrai qu'au début de toute méthode, il y a des tests a efféctué sur les arguments.
Lam's a écrit : |
Presque vrai concernant la vitesse mais à cause justement des tests d'arguments effectués par la méthode append c'est moins rapide.
On chipote
Marsh Posté le 10-11-2004 à 10:56:25
phnatomass a écrit : Presque vrai concernant la vitesse mais à cause justement des tests d'arguments effectués par la méthode append c'est moins rapide. |
De quels tests tu parles ?
Marsh Posté le 10-11-2004 à 11:17:12
Une vieille méthode que j'avais faite, qui m'a pas mal servit (convertir l'entier en String avant tout) :
Code :
|
Marsh Posté le 10-11-2004 à 11:40:01
ReplyMarsh Posté le 10-11-2004 à 11:44:58
hongrois !? J'en sais rien moi. C'est simplement : préfixer les paramètres par un _ , puis le type (s'il s'agit d'un type primaire). C'est si incroyable que ça !?
Marsh Posté le 10-11-2004 à 11:45:28
et la methode avec une majuscule, et les for (; illisibles, et j'en passe
(en plus l'optimisation bidon des for (; aurait été avantageusement remplacée par un int length = _string.length() que tu appelles à chaque passage de ta boucle )
Marsh Posté le 10-11-2004 à 11:50:57
Tu pinailles. Franchement, on s'en contrefou. Une méthode aussi simple que ça, tout le monde est capable de la comprendre j'crois. L'important là, c'est la finalité, c'est tout.
EDIT : et puis _string.length(), ça ne fait que rendre un entier, alors niveau optimisation, c'est franchement négligable.
Marsh Posté le 10-11-2004 à 11:57:36
non, mais dans mon cas, je parlais de la notation hongroise, t'enerve pas
http://www.alaide.com/dico.php?q=n [...] se&ix=3960
Marsh Posté le 10-11-2004 à 11:59:28
C'est pas par rapport à ce que t'as dit que je m'énerve. C'est l'autre -- qui casse les c...
Marsh Posté le 10-11-2004 à 12:26:36
ReplyMarsh Posté le 10-11-2004 à 12:59:06
El_gringo a écrit : Tu pinailles. Franchement, on s'en contrefou. Une méthode aussi simple que ça, tout le monde est capable de la comprendre j'crois. |
ben justement, je la trouve particulierement imbitable par rapport à ce qu'elle fait
Marsh Posté le 08-11-2004 à 15:45:31
J'ai besoin de transformer un int en String, mais avec une taille de la String bien précise.
par exemple
formatString(22, 6) 22 = data a transformer, 6= taille de la String
donnerait "000022"
et formatString(4057, 5) "04057"
Une idée ?
Tkx
Message édité par aurel le 08-11-2004 à 15:48:39