2
votes

Manipulation de chaîne en Java8

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".


1 commentaires

cela s'appelle padding , btw. il y a des tonnes de liens en ligne


3 Réponses :


0
votes

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


1 commentaires

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?



1
votes

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"));


0 commentaires

4
votes

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);


0 commentaires