Partage
  • Partager sur Facebook
  • Partager sur Twitter

La classe string

les chaines

    19 novembre 2022 à 11:28:05

    Je suis débutant et je ne sais pas trop à propos ce qui se passe en mémoire. 

    pourquoi à l'interieur d'une boucle lorsque je veux afficher un caractère de la chaine en mettant chaine[i] ça ne fonctionne pas?

    une chaîne créée avec String ne doit pas changer mais on peux utiliser l'opérateur+= avec une chaine. Cela ne veut pas dire que la chaine créé change?

    merci

    -
    Edité par ToutiBel 19 novembre 2022 à 13:11:53

    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2022 à 6:38:40

      Bonjour,

      En Java, contrairement à C++ ou Python, la notation [i] ne fonctionne que pour les tableaux. On ne peut pas la redéfinir et l'utiliser dans une autre classe. On utilise donc des méthodes. Pour récupérer le caractère d'indice i, c'est chaine.charAt(i).

      Pour ton autre question, oui les String sont immuables, c'est à dire non modifiables. Quand tu fais+= sur une String, ça en crée une nouvelle. Idem pour toutes les méthodes qui "semblent" les modifier.

      Voici un exemple :

      String salutation = "Bonjour Monsieur";
      salutation.replace("Monsieur", "Madame");

      La méthode replace ne change pas la chaine référencée par la variable salutation. Elle en crée une nouvelle qui contient "Bonjour Madame" et la retourne. Le contenu de la variable salutation n'a pas changé.
      Il faut donc récupérer le résultat de replace (la nouvelle String), soit dans salutation (si tu ne souhaites pas conserver l'ancienne valeur) soit dans une nouvelle String.

      String salutation = "Bonjour Monsieur";
      salutation = salutation.replace("Monsieur", "Madame");
      
      // ou
      
      String salutation = "Bonjour Monsieur";
      String nouvelleSalutation = salutation.replace("Monsieur", "Madame");



      • Partager sur Facebook
      • Partager sur Twitter
        21 novembre 2022 à 11:18:54

        Différence fondamentale

        • en C, C++, et avant Pascal, Fortran, Cobol etc, une variable contient une donnée
        • en Java, Python, etc une variable fait référence à une donnée.
        Une donnée, c'est de l'information codée en binaire. En C, un variable c'est un nom pour un bout de mémoire où se trouve la donnée. En Java, c'est un nom pour un truc qui indique où se trouve la donnée. Une référence (son adresse, quoi).
        En java, si on fait, chaine1 = chaine1 + chaine2
        • une nouvelle donnée est formée par concaténation des chaînes
        • la référence de cette donnée remplace celle qui est dans chaine1
        et chaine1 += chaine2 est juste un raccourci pour la même opération (pour une certaine compatibilité syntaxique avec C/C++).
        Note: Cette vision marche aussi pour les types natifs en Java, si on déclare int n = 12;  on peut voir n comme une référence à l'entier 12 qui existe quelque part dans l'espace immatériel des entiers (l'entier est sa référence à lui-même).
        et n += 1 remplace la référence à 12 par la référence à 13.  12 et 13 sont des entiers immuables. On ne change pas 12 en 13, on change n. No problemo. Pas besoin de raconter des bobards comme quoi le passage des paramètres serait différent entre types natifs et objets.

        -
        Edité par michelbillaud 31 décembre 2022 à 18:21:37

        • Partager sur Facebook
        • Partager sur Twitter
          31 décembre 2022 à 14:47:48

          En Java, les chaînes de caractères sont immuables, ce qui signifie qu'une fois qu'une chaîne de caractères est créée, elle ne peut pas être modifiée. Lorsque vous utilisez l'opérateur += avec une chaîne de caractères, vous n'êtes pas en train de modifier la chaîne existante, mais plutôt en créant une nouvelle chaîne qui est la concaténation de la chaîne existante et de la chaîne ou de l'objet que vous êtes en train d'ajouter.

          Pour répondre à votre question sur l'utilisation de l'opérateur [i] pour accéder à un caractère d'une chaîne, sachez que cet opérateur ne fonctionne pas avec les chaînes de caractères en Java. Pour accéder à un caractère spécifique dans une chaîne de caractères en Java, vous pouvez utiliser la méthode charAt(int index) de la classe String, comme ceci :

          String maChaine = "Bonjour";
          char premierCaractere = maChaine.charAt(0);
          System.out.println(premierCaractere); // Affiche 'B'
          



          • Partager sur Facebook
          • Partager sur Twitter

          La classe string

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown