Hello,

Dans mon projet d'application de gestion en java, j'ai, à de nombreux endroits, des chaînes de caractères, encodées par l'utilisateur, qui sont envoyées et stockées dans une base de donnée MySQL.

Dans le but de faire face à tout encodage de caractères spéciaux par l'utilisateur, j'ai cherché à faire une classe contenant une méthode qui me transforme les chaînes contenant des ' , des \ et des " avec un backslash devant : exemple : L'ombre devient L\'ombre.

J'ai réussi à écrire ceci qui fonctionne très bien :

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
import java.util.*;
 
public class StringMySQLConverter
{
public String chaineAConvertir;
//******************************************************************
public StringMySQLConverter(String chaineAConv )
  {
  chaineAConvertir = chaineAConv;
  }
//******************************************************************
public String adapterPourMySQL()
  {
  char [] mot;  mot = chaineAConvertir.toCharArray();
 
  Vector leMot = new Vector();
 
  for( int i=0; i<mot.length; i++)
                  leMot.add( ""+mot[i] );
 
  Vector nouvMot = new Vector();   int j=0;
 
  for (int i=0; i<leMot.size(); i++)
    {
    if (  ((String)leMot.elementAt(i)).equals("\'") )
         {
         nouvMot.insertElementAt("\\",j);
         j++;
         nouvMot.insertElementAt( (String)leMot.elementAt(i) , j);
         }
    else if (  ((String)leMot.elementAt(i)).equals("\\") )
              {
              nouvMot.insertElementAt("\\",j);
              j++;
              nouvMot.insertElementAt( (String)leMot.elementAt(i) , j);
              }
         else if (  ((String)leMot.elementAt(i)).equals("\"") )
                   {
                   nouvMot.insertElementAt("\\",j);
                   j++;
                   nouvMot.insertElementAt( (String)leMot.elementAt(i) , j);
                   }
              else {
                   nouvMot.insertElementAt( (String)leMot.elementAt(i) , j);
                   }
    j++;
    }
 
  StringBuffer chaineARenvoyer = new StringBuffer();
 
  for (int h=0; h<nouvMot.size(); h++)
                chaineARenvoyer.append( (String)nouvMot.elementAt(h) );
 
  return chaineARenvoyer.toString();
  }
//******************************************************************
}
Ce qui donne un appel de la sorte dans le programme qui l'utilise :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
chaineAEnvoyer = (new StringMySQLConverter(texteEncodé)).adapterPourMySQL() ;
Mais je me demande s'il n'y a pas moyen de faire plus léger ou plus beau et concis dans l'écriture...
Quelqu'un a une autre idée à me donner pour faire en plus simple cette préparation de chaîne ?

[ Modéré par Bulbo ]
Ajout d'un tag dans le titre
Les Règles du Forum