Bonjour à tous,j'aimerais savoir comment peut-on comparé deux chaine d caractère arabe en java,merci
Bonjour à tous,j'aimerais savoir comment peut-on comparé deux chaine d caractère arabe en java,merci
Généralement pour comparer deux chaînes, tu peux utiliser la méthode equals ou compareToQuel est exactement le problème avec les chaînes en arabe ?
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 chaîne1.equals(chaîne2) chaîne1.compareTo(chaîne2)
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 ).
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
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.
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
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.
merci beaucoup pour ton aide,
je vais essayer dans ce sens!!!
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
Salut,
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++
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager