12

I'm working on a project in which I need to display textual trees. I'm trying to use Java's String.format method to simplify the formatting process, but I ran into trouble when trying to apply variable widths.

Current I have a variable (an int) which is called depth.

I try to do the following:

String.format("%"+depth+"s"," ") + getOriginalText() + "\n";

However I get the following error.

java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0

Any suggestions on how to do this, or should I just settle for loops?

Thanks for the help!

Andrew Thompson
  • 163,965
  • 36
  • 203
  • 405
Phillip Huff
  • 515
  • 1
  • 6
  • 16
  • Are you actually asking this? http://stackoverflow.com/questions/388461/how-can-i-pad-a-string-in-java – billjamesdev Dec 09 '12 at 06:09
  • Can you post the full code, I'm trying to understand what are you doing. – ElderMael Dec 09 '12 at 06:14
  • I wondered this also because I knew that C/C++ had a `*` modifier: `The width is not specified in the format string, but as an additional integer value argument preceding the argument that has to be formatted.`, i.e. I was searching for something like `String.format( "%*i", pad_width, number )`. But the given answer makes sense, too. – mxmlnkn Jul 27 '16 at 11:54

2 Answers2

10

This works:

int depth = 5;
String str= "Hello"+ String.format("%"+depth+"s"," ") + "world" + "\n";
System.out.println(str);

It prints 5 while spaces in between.

Hello     World.

Please check you code and make sure that depth is assigned with a valid int value. Most likely that (invalid value in depth) is the problem.

Yogendra Singh
  • 32,067
  • 6
  • 59
  • 71
0

You could try the following using "System.out.printf" command:

int depth = 10;

System.out.printf("%s" + "%" +depth + "s", "Hello","World" );

Hello    World