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.
5 Réponses :
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();
}
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
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();
}
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
0copies: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
StringBuilderBien 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
StringBuilderest: quand Java voitsomething = string1 + string2 , il écrit en interneStringBuilder 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 objetStringBuilderest créé, ajouté, reconverti en une toute nouvelleStringet jeté à chaque fois. C'est pourquoi la méthode suggérée est d'en avoir un,StringBuilderdédié, de l'utiliser plusieurs fois et d'en obtenir le résultat une seule fois, à la fin.
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;
}