2
votes

Java: comment utiliser une boucle pour créer une chaîne sans impression?

Je suis un débutant avec java et un concept m'est assez flou. J'ai besoin de créer une méthode qui crée une nouvelle chaîne en répliquant une autre chaîne. Par exemple, si String1 est "java" et qu'il est spécifié qu'il doit être répété 4 fois et que chacun d'eux doit être séparé par une virgule, la nouvelle chaîne ressemblera à ceci: java, java, java, java Cependant, la méthode ne doit pas l'imprimer, mais uniquement créer une nouvelle chaîne qui est ensuite imprimée dans le programme principal. C'est un problème pour moi, car j'ai du mal à comprendre, comment puis-je utiliser une boucle pour créer quelque chose sans l'imprimer. Je pense que le code suivant l'imprimerait correctement:

public static void replicate(String str, int times) {
   for (int i = 0; i < times; i++) {
      System.out.print(str);
      if (i < times -1) {
         System.out.print(", ");
      }
   }
}

Comment pourrais-je le transformer afin que je puisse utiliser la méthode pour créer une nouvelle chaîne sans l'imprimer? Je suppose que c'est quelque chose de très simple, mais je ne sais pas du tout comment faire cela, car chaque guide utilise juste des exemples d'impression dans ce genre de situations.


0 commentaires

5 Réponses :


2
votes

C'est facile à faire en utilisant le Classe StringBuilder , qui peut être utilisée comme ceci:

public static String replicate(String str, int times) {
   StringBuilder builder = new StringBuilder();

   for (int i = 0; i < times; i++) {
      builder.append(str);
      if (i < times - 1) {
         builder.append(", ");
      }
   }

   return builder.toString();
}


0 commentaires

4
votes

C'est beaucoup mieux avec les collections et rejoignez

import java.util.*;
public class Main 
{
    public static void main(String[] args) 
    {


        String newstr=String.join(",", Collections.nCopies(3, "java"));
        System.out.println(newstr);
    }
}

Violon de travail- https : //repl.it/repls/OfficialInvolvedObject


0 commentaires

1
votes

Une option consiste à utiliser un StringBuilder , comme illustré par la réponse d'Emily . Étant donné que le même délimiteur est utilisé à chaque fois, une autre option consiste à utiliser java.util.StringJoiner . Voici un exemple:

public static String replicate(String str, int times) {
  StringJoiner joiner = new StringJoiner(", ");
  for (int i = 0; i < times; i++) {
    joiner.add(str);
  }
  return joiner.toString();
}


0 commentaires

0
votes

Je suppose que c'est quelque chose de super simple

Vous avez raison. Alors que les autres réponses montrent différentes classes d'assistance, vous pouvez le faire en réaffectant déjà une seule variable String :

public static String replicate(String str, int times) {
   StringBuilder result = new StringBuilder(str);
   for (int i = 1; i < times; i++) {
      result.append(", ");
      result.append(str);
   }
   return result.toString();
}

Ou, si vous le faites ne vous inquiétez pas d'avoir à fournir 0 copies:

public static String replicate(String str, int times) {
   String result=str; // one copy, without comma
   for (int i = 1; i < times; i++) {
      result += ", " + str; // all the other copies have their commas
   }
   return result;
}

Cette dernière "astuce" peut également être utilisée avec StringBuilder Bien sûr:

public static String replicate(String str, int times) {
   String result="";
   for (int i = 0; i < times; i++) {
      result += str; //System.out.print(str);
      if (i < times -1) {
         result += ", "; //System.out.print(", ");
      }
   }
   return result;
}

Btw, il peut être intéressant de mentionner ce que l'histoire de StringBuilder est: quand Java voit something = string1 + string2 , il écrit en interne StringBuilder temp = new StringBuilder (string1); temp.append (chaîne2); quelque chose = temp.toString () (bien sûr, c'est une variable interne sans nom, pas "temp"). Ainsi, un tout nouvel objet StringBuilder est créé, ajouté, reconverti en une toute nouvelle String et jeté à chaque fois. C'est pourquoi la méthode suggérée est d'en avoir un, StringBuilder dédié, de l'utiliser plusieurs fois et d'en obtenir le résultat une seule fois, à la fin.


0 commentaires

1
votes

Le code suivant devrait être utile à des fins académiques dans lesquelles vous ne pouvez pas utiliser toutes les bibliothèques Java. Vous souhaitez utiliser une variable pour stocker le texte répété, puis renvoyer cette variable à la méthode principale pour qu'elle soit imprimée. À des fins non académiques ou dans les cas où l'efficacité est une priorité, java.lang.StringBuilder doit être utilisé.

 public static String replicate(String str, int times) {
    String newString = "";
    for (int i = 0; i < times; i++) {
        newString = newString + str;
        if(i<times-1){
            newString = newString + ", ";
        }
    }
    return newString;
}


0 commentaires