Limiting the number of characters in a string, and chopping off the rest

Flethuseo picture Flethuseo · Dec 3, 2011 · Viewed 204.9k times · Source

I need to create a summary table at the end of a log with some values that are obtained inside a class. The table needs to be printed in fixed-width format. I have the code to do this already, but I need to limit Strings, doubles and ints to a fixed-width size that is hard-coded in the code.

So, suppose I want to print a fixed-width table with

    int,string,double,string
    int,string,double,string
    int,string,double,string
    int,string,double,string

    and the fixed widths are: 4, 5, 6, 6.

If a value exceeds this width, the last characters need to be cut off. So for example:

    124891, difference, 22.348, montreal

the strings that need to be printed ought to be:

    1248 diffe 22.348 montre

I am thinking I need to do something in the constructor that forces a string not to exceed a certain number of characters. I will probably cast the doubles and ints to a string, so I can enforce the maximum width requirements.

I don't know which method does this or if a string can be instantiated to behave taht way. Using the formatter only helps with the fixed-with formatting for printing the string, but it does not actually chop characters that exceed the maximum length.

Answer

Jaksa picture Jaksa · Nov 21, 2014

You can also use String.format("%3.3s", "abcdefgh"). The first digit is the minimum length (the string will be left padded if it's shorter), the second digit is the maxiumum length and the string will be truncated if it's longer. So

System.out.printf("'%3.3s' '%3.3s'", "abcdefgh", "a");

will produce

'abc' '  a'

(you can remove quotes, obviously).