C:llä olisi edellisen esimerkin tulostus helppo muotoilla kutsulla:
printf("%17s on %2d kärkeä,\n" ,TAHOKAS,KARKIA);
Javassa joudumme kuitenkin tekemään saman asian eteen aluksi joukon apumetodeja:
/**
* Ohjelma tulostaa tietoja kuutiosta "siistissä" muodossa
* @author Vesa Lappalainen
* @version 1.0, 05.01.2003
*/
class Kuutio4 {
static final String TAHOKAS = "Kuutiossa";
static final int KARKIA = 8;
static final int SIVUTASOJA = 6;
static final int SARMIA = 12;
/**
* Palauttaa jonon s muotoiltuna vähintään len-pituiseksi
* <pre>
* Esim: fmt("2",3) => " 2"
* fmt("2",-3) => "2 "
* </pre>
* @param s muotoiltava jono
* @param len pituus, negatiivisella vasempaan laitaan, pos. oikeaan
* @return muotoiltu jono
*/
static String fmt(String s,int len) {
int needs = Math.abs(len) - s.length();
if ( needs <= 0 ) return s;
StringBuffer fill = new StringBuffer(" ");
while ( fill.length() < needs ) fill.append(" ");
fill.delete(needs,1000);
if ( len < 0 ) return s + fill;
return fill + s;
}
/**
* Tulostaa 2 merkkijonoa ja yhden kokonaisluvun siististi
* @param s1 Ensimmäinen tulostettava jono
* @param i tulostettava kokonaisluku
* @param s2 toinen tulostettava jono
*/
static void tulosta(String s1, int i, String s2) {
System.out.println(fmt(s1,20) + " " + fmt(String.valueOf(i),2) + " " + s2);
}
public static void main(String[] args) {
tulosta(TAHOKAS + " on", KARKIA , "kärkeä,");
tulosta("" , SIVUTASOJA, "sivutasoa ja");
tulosta("" , SARMIA , "särmää.");
}
}
0 1 2 3 4 1234567890123456789012345678901234567890 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Kuutiossa on 8 kärkeä, 6 sivutasoa ja 12 särmää.