J'ai écrit du code en Java7 pour manipuler une chaîne. Si la taille de la chaîne est> = 10, elle renverra une sous-chaîne de taille 10 mais si la taille est Il y a des questions liées à la manipulation de chaînes en Java8 mais aucune d'entre elles ne résout mon problème.
String s = "12345678"; String s1 = s; if(s.length() >= 10) { s1 = s1.substring(0,10); } else { for (int k = s.length() ; k < 10 ; k++) { s1 = s1 + "0"; } }
J'attends la chaîne de sortie "1234567800".
3 Réponses :
Si vous avez Java 11, vous pouvez utiliser une nouvelle méthode String.repeat
.
Trouvez simplement combien de zéros vous avez besoin int n = 10 - s.length ();
puis ajoutez-le s1 = s + "0" .repeat (n);
En Java 8, vous pouvez générer des zéros avec des flux
String zeros = Stream.generate(() -> "0").limit(n).collect(Collectors.joining()); s1 = s + zeros
Je soupçonne que c'est un remplacement du bloc else car il générera une chaîne de 0 et la concaténera avec la chaîne s. Existe-t-il un moyen d'omettre le blocage if else?
vous pouvez combiner Stream :: generate
, Collectors :: collecteAndThen
et Collectors :: join
pour obtenir une solution en une seule ligne, bien qu'elle n'est pas mieux que ceux-ci
System.out.println(padd10("123")); System.out.println(padd10("1234567800"));
Ce n'est sûrement pas une tâche pour l'API Stream. Si vous souhaitez toujours le faire mais minimiser la perte de lisibilité et de performances, vous pouvez utiliser quelque chose comme
int cap = Math.min(s.length(), 10); String s1=new StringBuilder(10).append(s, 0, cap).append("0000000000", cap, 10).toString();
Une approche simple serait
int cap = Math.min(s.length(), 10); String s1 = s.substring(0, cap)+"0000000000".substring(cap);
cela s'appelle
padding
, btw. il y a des tonnes de liens en ligne