4 votes

One-liner pour l'indentation à espace variable

Dans une fonction de "jolie impression" pour une carte imbriquée, j'ai besoin d'une simple fonction d'indentation pour ajouter l'espace nécessaire à ma structure. Je voulais une solution simple en une ligne et la meilleure que j'ai trouvée était une solution en deux lignes. Idéalement, je voulais ceci :

String indentSpace = new String(Arrays.fill(new char[indent], 0, indent-1, ' '));

Cela ne fonctionne pas car Arrays.fill n'est pas "fluide" ; il renvoie void.

Une traduction littérale de cette expression est trop verbeuse à mon goût :

char[] chars = new char[indent];
Arrays.fill(chars , ' ');
String indentSpace = new String(chars);

Finalement, je me suis contenté d'une solution à deux lignes, peu convaincante :

private final String indentSpace="                                                     ";
...
String alternative = indentSpace.substring(0,indent % indentSpace.length());

Il s'agit d'une petite critique, mais je suis curieux de savoir s'il existe une solution plus élégante. Je reconnais que la dernière option pourrait être un bon choix en termes de performances.

Des prises de position ?

9voto

dogbane Points 85749

La phrase suivante devrait fonctionner :

String indentSpace  = new String(new char[indent]).replace('\0', ' ');

5voto

Joachim Sauer Points 133411

Si le nombre de lignes est votre principale mesure, il s'agit d'une façon compacte de créer un tableau de bord. String con n espaces :

String spaces = n == 0 ? "" : String.format("%" + n + "s", "");

Les performances ne sont probablement pas si bonnes.

1voto

flamingpenguin Points 1980

Si vous avez besoin de créer une chaîne de caractères contenant uniquement des espaces, alors StringUtils.repeat fonctionnera :

String indentSpace = StringUtils.repeat(' ', indent);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X