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

C# Discussion :

[C#] Comment remplacer caracteres dans une chaine ?


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 164
    Points : 92
    Points
    92
    Par défaut [C#] Comment remplacer caracteres dans une chaine ?
    bonjour a tous,

    J'ai une p'tite application console qui ne fait que de prendre une chaine et de voir si des mauvais caracteres y sont !
    Ces mauvais caracteres sont stockes dans un tableau de char !

    si ceux ci sont presents dans la chaine , je les enleve grâce a la methode .Insert qui prent un entier + la chaine a remplacer !

    J'ai beau essaye ca ne marche pas ma chaine resort identique a l'entree !!!

    si je rentre: chri>tophe
    il me resort: chri>tophe
    alors que je voudrais : chri_tophe

    Si vous avez une idée !

    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
     
    private static char[] badCharacter = {'>','<','"'};
    static void Main(string[] args)
    {
       Console.WriteLine("entrez une phrase");
       string ch = Console.ReadLine();
       for(int i = 0; i<ch.Length; i++)
       {
          for(int j = 0; j<badCharacter.Length; j++)
          {
            if(ch[i] == badCharacter[j])
            { ch.Insert(i,"_");}
          }
       }
      Console.WriteLine(ch);
      Console.ReadLine();
    Christophe

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    va voir du cote de la fonction Replace de la classe string . Tu y trouveras tout ce que veux.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    re,

    ok je viens de comprendre mais ca tourne a moitie qd meme

    qd je tape : <>"chris
    il me resort: <>_chris
    alors que je voudrais : ___chris

    voila ce que j'ai comme code !
    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
     
    private static char[] badCharacter = {'>','<','"'};
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      Console.WriteLine("entrez une phrase");
      string ch = Console.ReadLine();
      string un = string.Empty;
      for(int i = 0; i<ch.Length; i++)
      {
        for(int j = 0; j<badCharacter.Length; j++)
        {
          if(ch[i] == badCharacter[j])
          {
             Console.WriteLine(ch[i] + " " + badCharacter[j]);
             un =ch.Replace(badCharacter[j].ToString(), "_");
          }
        }
      }
      Console.WriteLine(un);
      Console.ReadLine();
    }

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Le "probleme" c'est que les chaines de caracteres en .Net (enfin je ne sais pas si c'est vrai pour le CLR, mais c'est vrai pour C# et VB.Net) sont "immutable". En français ça veut dire qu'une fois une chaine créée, elle ne peut pas etre modifiée. ça implique que toute les fonctions traitant des chaines de caractères ne modifient pas les chaines en paramètres, mais renvoient une nouvelle chaine (la chaine en argument restant inchangée !).

    Donc :

    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
     
    static void Main(string[] args)
    {
       Console.WriteLine("entrez une phrase");
     
       string ch = Console.ReadLine();
     
       for(int j = 0; j<badCharacter.Length; j++)
       {
          ch = ch.Replace(badCharacter[j], '_');
       }
     
       Console.WriteLine(ch);
       Console.ReadLine(); 
    }
    Tu notes qu'il faut réassigner ta variable ch avec la chaine retournée par la fonction Replace. Note aussi qu'avec la fonction Replace tu n'as pas besoin de parcourir tous les caractères de ta chaine, puisque forcemment c'est déja fait par la fonction elle même...

    PS : je me demande meme si une surcharge de Replace ne prendrait pas directement un tableau de caractères à remplacer, du coup tu n'aurais plus aucune boucle à faire toi meme. A vérifier.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    ok

    juste une derniere question !

    comment savoir si ma chaine contient des mauvais caracteres ou pas !


    y'a t il une fonction dotnet !
    christophe

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Enfin pour ma part ceci fonctionne parfaitement
    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
     
    public static void Main(string[] args)
    { 
       Console.WriteLine("entrez une phrase");
       string text = Console.ReadLine();
       if(HasBadChar(text))
       { 
          Console.WriteLine("votre phrase contient de mauvais caractères:");
          text = Replace(text);
       }
       else
       { Console.WriteLine("votre phrase est nickel");}
       Console.WriteLine(text);
       Console.ReadLine();
    }
    private static char[] badChars = {'>','<','"'};
    private static string Replace(string text)
    {
       foreach(char badChar in badChars)
       { text = text.Replace(badChar, '_');}
       return text;
    }
    private static bool HasBadChar(string text)
    {
       bool test = false;
       foreach(char badChar in badChars)
       { 
          if(Array.IndexOf(text.ToCharArray(),badChar)!=-1)
          {
             test = true;
             break;
          }
       }
       return test;
    }
    Ne serais-tu pas par hasard sous framework 2.0, car dans ce cas il y aurait d'autres pistes plus efficace

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    vieux post que je réactive. Voilà ma solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static String SwitchChar(this string str, string carac, char cible)
    {
          return String.Join(carac, str.Split(cible));
    }
    public static String SwitchChar(this string str, IDictionary<String, char> dic)
    {
          String retour = String.Empty;
          foreach (KeyValuePair<string, char> value in dic)
          {
              retour = str.SwitchChar(value.Key, value.Value);
          }
          return retour;
    }
    améliorable à souhait.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment remplacer \b dans une chaine ?
    Par phd1963 dans le forum Langage
    Réponses: 5
    Dernier message: 13/08/2008, 20h58
  2. remplacer les occurences d'un caractere dans une chaine par un autre
    Par lity7 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 14/03/2008, 12h02
  3. remplacement de caractere ' dans une chaine
    Par bab_dev dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 24/01/2008, 14h12
  4. Réponses: 2
    Dernier message: 06/02/2007, 22h48
  5. Réponses: 2
    Dernier message: 12/01/2006, 08h34

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