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

Java Discussion :

Comparaison deux chaine de caractère arabe en java


Sujet :

Java

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Comparaison deux chaine de caractère arabe en java
    Bonjour à tous,j'aimerais savoir comment peut-on comparé deux chaine d caractère arabe en java,merci

  2. #2
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Généralement pour comparer deux chaînes, tu peux utiliser la méthode equals ou compareTo
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chaîne1.equals(chaîne2)
    chaîne1.compareTo(chaîne2)
    Quel est exactement le problème avec les chaînes en arabe ?
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut pb avec les chaine en arabe
    merci pour la reponse,
    le problème, c'est que equals ou compareTo sont utilisés pour les caractères latins, ce qui fait que la comparaison est impossible. J'ai appris que la comparaison en arabe n'était pas la même comme celle qu'on a l'habitude de faire!! donc du coup je suis coincé!!
    les caractères en arabe ne sont pas agencés comme les caractères en latin!!
    si toute fois vous avez une idée cela va beaucoup me faire avancer,
    merci pour tout

  4. #4
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Peut tu preciser un peu plus comment sont agences les caracteres en arabe.

    Car a moins de rencontrer un arabophone, je vois pas trop comment t'aider.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    en arabe lorskon agence deux caractère la chaine obtenue è complètement différente des deux caractère initiaux,
    g ce soucis car je veux en faite effectué une recherche d une chaine de caractère à l'interieur d'une autre chaine de caractère dc ce pb rend les choz un pe dificil,merci deja pr ton aide

  6. #6
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Tu peux essayer d'ecrire autrement qu'en style SMS, c'est plus facile pour la comprehesion.

    Sinon, pour rechercher une chaine de caractere dans une autre tu as indexOf quie teretourne laposition de la chaine trouvee :

    "abcde".indexOf("cd") // renvoie 2

    "abcde".indexOf("jj") // renvoie -1 car non trouvee

    Peut etre ca peut t'aider.

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    merci beaucoup pour ton aide,
    je vais essayer dans ce sens!!!

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Février 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    est ce que vous écriver de l'arabe dans votre code
    ou vous liser les information de localisation depuis des resources externe tel que
    fichiers ou base de donnée

    pour la compraraison vous pouvez transformer le texte arabe puis comprer les transformées

  9. #9
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par BMwael Voir le message
    est ce que vous écriver de l'arabe dans votre code
    C'est possible si l'encodage du fichier source est bien spécifié lors de la compilation (les EDI savent très bien gérer cela).

    Sinon la solution au problème est présente dans la FAQ : Comment comparer des chaînes de caractères selon la Locale ?

    a++

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par vetchang Voir le message
    en arabe lorskon agence deux caractère la chaine obtenue è complètement différente des deux caractère initiaux
    Pour les quelques essais que j'ai vu dans des livres (Java 2D Graphics chez O'Reilly) et un ou deux posts auxquel j'ai participe sur ce forum et quelques essais Java2D persos, ce n'est pas tout a fait vrai.

    La chaine de caractere contient bien des caracteres unicodes arabes separes, MAIS Swing et Java2D affichent les ligatures quand c'est necessaire ce qui donne un rendu different (+ le fait d'inverser le deplacement du carret et le sens de la chaine pour la gestion du bidir) :
    - Quand on affiche "C1<espace>C2", on a a l'ecran le glyphe de C1, un espace et le glyphe de C2 (note : affichage droite -> gauche !!!!).
    - quand on affiche "C1C2", on a a l'ecran un glyphe C3 resultant de la ligature de C1 et C2 .
    Mais en aucun cas la chaine n'est modifiee pour include le glyphe C3, son contenu reste toujours "C1C2"

    Code (modifie) de l'exemple BidirectionalText du livre Java 2D Graphics de O'Reilly :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    import java.awt.*;
     
    public class BidirectionalText {
      public static void main(String[] args) {
        Frame f = new ApplicationFrame("BidirectionalText v1.0") {
          public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
     
            Font font = new Font("Lucida Sans Regular", Font.PLAIN, 32);
     
            g2.setFont(font);
            // La chaine arabe s'affiche droite->gauche. 
            // C'est encore plus evident avec un champs texte ou on peut voir le deplacement du curseur qui saute tout a la droite du mot arabe quand on quitte le mot "Please".
            // Puis il revient vers la gauche lorsqu'on avance dans le mot 
            // Enfin, il saute tout a droite pour commencer le mot "slowly".
            g2.drawString("Please \u062e \u0644 \u0639 slowly.", 40, 80); 
            // On voit ici que les deux caracteres lies se retrouvent a gauche sur l'ecran alors qu'ils sont a droite de la chaine.
            g2.drawString("Please \u062e \u0644\u0639 slowly.", 40, 120); 
            // On voit ici que les deux caracteres lies se retrouvent a droite sur l'ecran alors qu'ils sont a gauche de la chaine.
            g2.drawString("Please \u062e\u0644 \u0639 slowly.", 40, 160); 
            // ligrature integrale de la chaine.
            g2.drawString("Please \u062e\u0644\u0639 slowly.", 40, 200);       }
        };
        f.setVisible(true);
      }
    }
     
    import java.awt.*;
    import java.awt.event.*;
     
    public class ApplicationFrame
        extends Frame {
      public ApplicationFrame() { this("ApplicationFrame v1.0"); }
     
      public ApplicationFrame(String title) {
        super(title);
        createUI();
      }
     
      protected void createUI() {
        setSize(500, 400);
        center();
     
        addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            dispose();
            System.exit(0);
          }
        });
      }
     
      public void center() {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = getSize();
        int x = (screenSize.width - frameSize.width) / 2;
        int y = (screenSize.height - frameSize.height) / 2;
        setLocation(x, y);
      }
    }

    Donc a priori (car je n'ai pas teste), un compareTo() devrait marcher correctement. Apres, faut voir en pratique et pareil pour compareToIgnoreCase().
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Problème de Comparaison de deux chaines de caractéres
    Par developppez dans le forum Requêtes
    Réponses: 10
    Dernier message: 16/03/2009, 16h21
  2. comparaison de deux chaines de caractères
    Par Toomaaaaa dans le forum Langage
    Réponses: 2
    Dernier message: 29/10/2008, 18h03
  3. problème de comparaison deux chaines de caractères
    Par jean sami dans le forum Débuter
    Réponses: 2
    Dernier message: 15/06/2008, 23h47
  4. comparaison de deux chaines de caractères en asp
    Par MortDansLAme dans le forum ASP
    Réponses: 7
    Dernier message: 10/01/2008, 12h36
  5. comparaison de deux chaines de caractères
    Par zazou41 dans le forum C++
    Réponses: 6
    Dernier message: 27/02/2006, 14h26

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