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

Langage Java Discussion :

Les char[] comment ça marche ?


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 2
    Points
    2
    Par défaut Les char[] comment ça marche ?
    Bonjour,

    me revoilà avec mes 2 bras cassés. Je manipule, avec des gants en kevlar, des char[]. J'essaye d'en tracer un, dans System.out, pour la science.

    A la base j'ai un JTextArea. Je le colle dans un char[] comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char text[];
    (...)
    text[i]=(char)(textArea.getText().charAt(i));
    Pourquoi est-ce qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.print((short)text[i]);
    me sort de temps en temps de valeurs genre 8950 ? Est-ce bien raisonnable ?

    Merci d'avance.

    N'oublier pas les sommations d'usage.

  2. #2
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Citation Envoyé par popollux Voir le message

    Pourquoi est-ce qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.print((short)text[i]);
    me sort de temps en temps de valeurs genre 8950 ? Est-ce bien raisonnable ?

    Merci d'avance.

    N'oublier pas les sommations d'usage.
    Bonjour,

    La vrai question est plutôt :

    Pourquoi castes tu en short avant d'afficher? Y a t'il une raison particulière?

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par popollux Voir le message

    Pourquoi est-ce qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.print((short)text[i]);
    me sort de temps en temps de valeurs genre 8950 ? Est-ce bien raisonnable ?
    Parce que tu lui demande d'afficher un nombre, il affiche un nombre Voir la javadoc de printstream pour plus de détails.

  4. #4
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    @Deadpool : c'est la vraie question ? =)
    Je cast en short pour qu'il m'affiche la valeur, pas le caratère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char car = 'A';
    System.out.print(car); -> 'A'
    System.out.print((short)car); -> 65
    Le System.out en fait je m'en fous, je constate simplement qu'en mettant des char j'ai des valeurs auxquelles je ne m'attendais pas. Je suis a priori mal renseigné, c'est juste pour être sûr.

    @tchize_ :
    Parce que tu lui demande d'afficher un nombre, il affiche un nombre
    -> Ben oui, c'est pas le fait que ça soit un nombre, c'est sa valeur mon problème. C'est la valeur d'un caractère d'un textArea. Alors bon, c'est encore le fait que je "viens" du C, et qu'un char en C c'est sur 8 bits. En Java il me semble que c'est sur 16bits.
    Mais du coup on récupère quoi en faisant textArea.getText().chatAt(i) ? C'est pas de l'ASCII ? C'est de l'unicode ?

  5. #5
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Points : 47
    Points
    47
    Par défaut
    dans la javadoc http://download.oracle.com/javase/6/...harAt%28int%29
    public char charAt(int index)

    Returns the char value at the specified index. An index ranges from 0 to length() - 1. The first char value of the sequence is at index 0, the next at index 1, and so on, as for array indexing.

    If the char value specified by the index is a surrogate, the surrogate value is returned.
    Unicode Character Representations

    The char data type (and therefore the value that a Character object encapsulates) are based on the original Unicode specification, which defined characters as fixed-width 16-bit entities. The Unicode standard has since been changed to allow for characters whose representation requires more than 16 bits. The range of legal code points is now U+0000 to U+10FFFF, known as Unicode scalar value. (Refer to the definition of the U+n notation in the Unicode standard.)

    The set of characters from U+0000 to U+FFFF is sometimes referred to as the Basic Multilingual Plane (BMP). Characters whose code points are greater than U+FFFF are called supplementary characters. The Java 2 platform uses the UTF-16 representation in char arrays and in the String and StringBuffer classes. In this representation, supplementary characters are represented as a pair of char values, the first from the high-surrogates range, (\uD800-\uDBFF), the second from the low-surrogates range (\uDC00-\uDFFF).

    A char value, therefore, represents Basic Multilingual Plane (BMP) code points, including the surrogate code points, or code units of the UTF-16 encoding. An int value represents all Unicode code points, including supplementary code points. The lower (least significant) 21 bits of int are used to represent Unicode code points and the upper (most significant) 11 bits must be zero. Unless otherwise specified, the behavior with respect to supplementary characters and surrogate char values is as follows:

    * The methods that only accept a char value cannot support supplementary characters. They treat char values from the surrogate ranges as undefined characters. For example, Character.isLetter('\uD840') returns false, even though this specific value if followed by any low-surrogate value in a string would represent a letter.
    * The methods that accept an int value support all Unicode characters, including supplementary characters. For example, Character.isLetter(0x2F81A) returns true because the code point value represents a letter (a CJK ideograph).

    In the Java SE API documentation, Unicode code point is used for character values in the range between U+0000 and U+10FFFF, and Unicode code unit is used for 16-bit char values that are code units of the UTF-16 encoding. For more information on Unicode terminology, refer to the Unicode Glossary.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 636
    Points
    21 636
    Par défaut
    Pour résumer,
    - non ce n'est pas limité à l'ASCII... Mais les caractères ASCII sont représentés exactement pareil.
    - oui c'est de l'unicode, à la base.
    - Pour les caractères unicodes supérieurs à 0xFFFF, ils sont en fait représentés sur deux chars (à la manière d'UTF-16. Les chars étant 16-bits pour raisons historiques, il fallait bien trouver un moyen.)

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    pour etre exact, sur les 256 premières entrées correspondent à celles de l'iso-8859-1

    Après , pour les caractères non latins, genre le cyrillique, on grimpe dans les valeurs.

  8. #8
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Je suis une éponge dans la mer de la science ^_^

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par popollux Voir le message
    Je suis une éponge
    Vous en avez de la chance, ça peut vivre plus de 15000 ans

    Sinon, n'oubliez pas le bouton si vous avez votre réponse.

Discussions similaires

  1. Les ActionForm et comment ça marche
    Par R1pToR dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/06/2007, 17h59
  2. Les include me gonflent ! comment ça marche ? help !
    Par grinder59 dans le forum Langage
    Réponses: 2
    Dernier message: 10/05/2007, 11h21
  3. vc++ express 2005 comment transformé les char * en String
    Par ben_ghost dans le forum Visual C++
    Réponses: 1
    Dernier message: 20/07/2006, 06h52
  4. Réponses: 7
    Dernier message: 22/11/2005, 14h05
  5. Les Helper comment ça marche?
    Par lbrennet dans le forum CORBA
    Réponses: 1
    Dernier message: 29/09/2004, 14h07

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