IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Convertir une chaine quelconque en int


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Par défaut Convertir une chaine quelconque en int
    Bonjour.
    J'aurais voulu savoir si on peut simplement en java convertir une chaine de caractère quelconque (par exemple : "Bonjour!") en un entier et vice versa.
    J'ai vu dans la faq que l'on pouvait convertir une chaine en bytes mais ca ne me va pas (à moins de pouvoir transformer le byte en int mais je n'ai rien vu qui allait dans ce sens)
    J'ai également vu les transformation de chaine comme "0001" en int mais la encore ca ne peut pas aller car il faut que je puisse transformer une chaine quelconque (y compris les caracteres comme / etc).

    Pour la petite histoire j'aimerais effectuer ce type de conversion pour lucene.
    En effet le tri de lucene pour les string est bien plus gourmand en ressource que le tri d'int.
    En convertissant des chaines en int j'espere pouvoir accélerer mes recherches.

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux utiliser le hashCode() pour cela...

    a++

  3. #3
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Par défaut
    Merci beaucoup.
    Effectivement ca marche bien dans le sens string->int.
    Maintenant je cherche le sens int->string.
    Comment récupérer ma chaine avec le résultat du hashCode ? (je ne pense pas en avoir 100% besoin mais ca m'éviterait d'indexer la même information deux fois, une fois en string et une fois en int).

    J'ai essayé valueOf mais évidemment ca ne marche pas (ca convertie bien un int en string mais ca ne résoud pas la valeur du hashCode).

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Normal le hashcode ne permet pas d'identifier de manière absolu une String... il permet seulement d'optimiser l'agencement des objets dans des Map (par exemple)...


    Je crois que je n'ai pas vraiment trop compris ce que tu voulais faire


    a++

  5. #5
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Par défaut
    Ben je n'ai pas été très clair non plus lol
    Et en y réflechissant bien je penses que ca ne marchera pas mais ca peut peut-être servir dans un autre cas.

    Ma problèmatique est la suivante.
    J'ai un index (lucene) qui contient 6 millions de références. La référence est une chaine de 32 caractères au maximum.
    Quand je fais une recherche "simple" j'ai un temps de réponse satisfaisant (qq secondes).
    Par contre quand je fais une recherche avec le tri des résultats le temps de réponse est plus important (jusqu'à 15 secondes). C'est normal qu'il y ait une perte mais le fait que la référence soit une chaine de caractére entraine une perte de performance encore plus importante.
    En effet avec lucene le tri de chaine de caractere est le plus gourmand en ressource.
    Donc pour optimiser mon temps de réponse je me disais qu'en transformant mes références en entier je gagnerais en performance (j'ai un autre index qui repose sur des entiers et lucene me sort 4 millions de résultats triès en quelques secondes)

    Il me suffirait de transformer aussi en entier le critére de recherche et de faire une recherche sur un int plutot que sur la vrai référence.
    Ensuite pour l'affichage je re-transforme en chaine l'entier que j'ai trouvé et le tour est joué (cela evite de devoir indexer les références deux fois, une fois dans leur forme normal et une fois sous leur forme de nombre entier).

    Bien sur cela est valable si mes références ne contiennent qu'une expression (pas de blanc, un seul mot donc) et je risque d'avoir des soucis avec les caractéres génériques type étoile...

    Il faut aussi que le tri alphanumérique des références donnent le même résultat une fois transformé en entier...

    Bref je suis pas sur que ce type de transformation soit simple...

  6. #6
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut
    Plutôt que de convertir en int, et pour éviter les problêmes de parsing, tu devrais essayer de convertir tes chaines en CharBuffer (http://java.sun.com/j2se/1.5.0/docs/...harBuffer.html).

    L'utilisation de CharBuffer au lieu de String est une optimisation pour les manipulations de chaines de caractères. Ca peut peut-être t'aider.

    [ajout]En fait, je pensais plus aux StringBuffer qu'aux CharBuffer Et il y a un papier la dessus sur "developpez" ![/ajout]

Discussions similaires

  1. Convertir une chaine binaire en INT
    Par Wiink dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/08/2011, 12h59
  2. Réponses: 11
    Dernier message: 08/06/2007, 20h19
  3. [XSLT]Convertir une chaîne en float, int etc ... avec XSL
    Par wozzz dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 19/05/2006, 10h12
  4. Convertir une chaine en format heure
    Par Lars dans le forum ASP
    Réponses: 3
    Dernier message: 24/05/2005, 11h44
  5. Convertir une chaine UTF8 en ISO-8859-1
    Par eods dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/08/2004, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo