15 votes

Comment indenter un paragraphe de plusieurs lignes écrit dans la console en java ?

Quelqu'un peut-il suggérer une méthode pour écrire une chaîne de caractères de plusieurs lignes sur une console système et faire en sorte que ce bloc de texte soit indenté ? Je recherche quelque chose de relativement léger, car cette méthode ne sert qu'à afficher l'aide d'un programme en ligne de commande.

45voto

Mac Points 8532

NOTE : L'approche décrite ci-dessous ne répond pas aux exigences actualisées décrites par @BillMan dans les commentaires de la question. Ce site ne sera pas enrouler automatiquement les lignes qui sont plus longues que la longueur de ligne de la console - n'utilisez cette approche que si l'enroulement n'est pas un problème.


En guise d'option simple, vous pouvez utiliser String.replaceAll() comme suit :

String output = <your string here>
String indented = output.replaceAll("(?m)^", "\t");

Si vous n'êtes pas familier avec les expressions régulières Java, cela fonctionne comme suit :

  • (?m) active le mode multiligne. Cela signifie que chaque ligne de output est considéré individuellement, au lieu de traiter output sur une seule ligne (ce qui est le cas par défaut).
  • ^ est une expression rationnelle correspondant au début de chaque ligne.
  • \t fait en sorte que chaque correspondance de la regex précédente (c'est-à-dire le début de chaque ligne) soit remplacée par un caractère de tabulation.

A titre d'exemple, le code suivant :

String output = "foo\nbar\nbaz\n"
String indented = output.replaceAll("(?m)^", "\t");
System.out.println(indented);

Produit cette sortie :

    foo
    bar
    baz

5voto

nullpointer Points 1135

Avec JDK/12 en accès anticipé on peut maintenant utiliser le indent API de la classe String qui est actuellement disponible sous la fonction de prévisualisation et peut être utilisée comme :

String indentedBody =
`<html>
   <body>
       <p>Hello World - Indented.</p>
   </body>
</html>`.indent(4);

et la sortie du code ci-dessus serait

    <html>
       <body>
           <p>Hello World - Indented.</p>
       </body>
    </html>

La spécification documentée actuelle de l'API supplémentaire est la suivante :

/**
 * Adjusts the indentation of each line of this string based on the value of
 * {@code n}, and normalizes line termination characters.
 * <p>
 * This string is conceptually separated into lines using
 * {@link String#lines()}. Each line is then adjusted as described below
 * and then suffixed with a line feed {@code "\n"} (U+000A). The resulting
 * lines are then concatenated and returned.
 * <p>
 * If {@code n > 0} then {@code n} spaces (U+0020) are inserted at the
 * beginning of each line. {@link String#isBlank() Blank lines} are
 * unaffected.
 * <p>
 * If {@code n < 0} then up to {@code n}
 * {@link Character#isWhitespace(int) white space characters} are removed
 * from the beginning of each line. If a given line does not contain
 * sufficient white space then all leading
 * {@link Character#isWhitespace(int) white space characters} are removed.
 * Each white space character is treated as a single character. In
 * particular, the tab character {@code "\t"} (U+0009) is considered a
 * single character; it is not expanded.
 * <p>
 * If {@code n == 0} then the line remains unchanged. However, line
 * terminators are still normalized.
 * <p>
 *
 * @param n  number of leading
 *           {@link Character#isWhitespace(int) white space characters}
 *           to add or remove
 *
 * @return string with indentation adjusted and line endings normalized
 *
 * @see String#lines()
 * @see String#isBlank()
 * @see Character#isWhitespace(int)
 *
 * @since 12
 */
public String indent(int n)

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