Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to center a string using String.format?

Tags:

public class Divers {   public static void main(String args[]){       String format = "|%1$-10s|%2$-10s|%3$-20s|\n";      System.out.format(format, "FirstName", "Init.", "LastName");      System.out.format(format, "Real", "", "Gagnon");      System.out.format(format, "John", "D", "Doe");       String ex[] = { "John", "F.", "Kennedy" };       System.out.format(String.format(format, (Object[])ex));   } } 

output:

|FirstName |Init.     |LastName            | |Real      |          |Gagnon              | |John      |D         |Doe                 | |John      |F.        |Kennedy             | 

I want the output to be centered. If I do not use '-' flag the output will be aligned to the right.

I did not find a flag to center text in the API.

This article has some information about format, but nothing on centre justify.

like image 912
rana Avatar asked Nov 16 '11 15:11

rana


People also ask

How do I center a string format?

You can now use StringUtils. center(String s, int size) in String. format .

How do I center a string in C#?

If the width is positive, right-alignment is used; if it is negative, left-alignment. For example string. Format("{0,-5}", obj) versus string. Format("{0,5}", obj) where obj is some object whose string representation is less than five characters long.

How do you center text in Python format?

Text Alignment You can align values within a specified length of text by using the < , > , or ^ symbols to specify left align, right align, or centering, respectively.

How do you align a string in Java?

For right align use +ve %ndformat("%4d", i * j); //each number formatted to a width of 4 so use %4d in the format method. } System. out. println(); // To move to the next line. }


2 Answers

I quickly hacked this up. You can now use StringUtils.center(String s, int size) in String.format.

import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat;  import org.junit.Test;  public class TestCenter {     @Test     public void centersString() {         assertThat(StringUtils.center(null, 0), equalTo(null));         assertThat(StringUtils.center("foo", 3), is("foo"));         assertThat(StringUtils.center("foo", -1), is("foo"));         assertThat(StringUtils.center("moon", 10), is("   moon   "));         assertThat(StringUtils.center("phone", 14, '*'), is("****phone*****"));         assertThat(StringUtils.center("India", 6, '-'), is("India-"));         assertThat(StringUtils.center("Eclipse IDE", 21, '*'), is("*****Eclipse IDE*****"));     }      @Test     public void worksWithFormat() {         String format = "|%1$-10s|%2$-10s|%3$-20s|\n";         assertThat(String.format(format, StringUtils.center("FirstName", 10), StringUtils.center("Init.", 10), StringUtils.center("LastName", 20)),                 is("|FirstName |  Init.   |      LastName      |\n"));     } }  class StringUtils {      public static String center(String s, int size) {         return center(s, size, ' ');     }      public static String center(String s, int size, char pad) {         if (s == null || size <= s.length())             return s;          StringBuilder sb = new StringBuilder(size);         for (int i = 0; i < (size - s.length()) / 2; i++) {             sb.append(pad);         }         sb.append(s);         while (sb.length() < size) {             sb.append(pad);         }         return sb.toString();     } } 
like image 132
Sahil Muthoo Avatar answered Sep 19 '22 17:09

Sahil Muthoo


public static String center(String text, int len){     String out = String.format("%"+len+"s%s%"+len+"s", "",text,"");     float mid = (out.length()/2);     float start = mid - (len/2);     float end = start + len;      return out.substring((int)start, (int)end); }  public static void main(String[] args) throws Exception{     // Test     String s = "abcdefghijklmnopqrstuvwxyz";     for (int i = 1; i < 200;i++){         for (int j = 1; j < s.length();j++){             //center(s.substring(0, j),i);             System.out.println(center(s.substring(0, j),i));         }     } } 
like image 23
Mertuarez Avatar answered Sep 16 '22 17:09

Mertuarez