package easyIO;
import java.text.*;
import java.util.*;
/**
* En klasse for formatering av tall og tekst i forbindelse med
* utskrift til fil eller skjerm. Klassen inneholder i hovedsak to
* typer av metoder: align
og format
.
*
*
* align
-metodene tar en tekst eller et tall og
* h?yrejusterer teksten/tallet p? opgitt antall plasser. Hvis
* teksten/tallet er lenger en oppgitt bredde, avsluttes
* teksten/tallet med opptil tre prikker. For metodene som tar reelle
* tall finnes det i tillegg mulighet for ? spesifisere antall plasser
* etter komma. Tallet blir i s? fall avrundet. Dette skjer f?r tallet
* h?yrejusteres.
*
*
*
Eksempler p? bruk: *
* System.out.println(Format.align("tekst"), 10); * System.out.println(Format.align("lenger tekst", 10); * System.out.println(Format.align(34.999, 10, 2)); ** Resulterer i f?lgende utskrift: *
* tekst * lenger ... * 35.00 ** * *
format
-metodene returnerer en tekst med det opgitte
* antall desimaler. Tallet blir avrundet.
*
*
For mer avansert formatering av desimaltall se
* {@link java.text.DecimalFormat}
*
*
* @author Forfatterne av "Rett p? Java"
* @version 5.0. (april, 2007) Ingen endringer siden ver 3.2.
*
*/
public class Format {
static final String versjon = "ver.3.2 - 2006-08-28";
/**
* H?yrejusterer teksten s
p?
* width
plasser. Hvis oppgitt antal plasser er mindre
* en lengden p? teksten markeres det med intill tre prikker.
* @param s teksten som skal justeres
* @param width antal plasser teksten skal justeres p?.
* @return Den nye h?yrejusterte teksten. Blanke tegn til slutt i
* teksten blir ignorert.
*
*/
public static String align(String s, int width) {
StringBuffer sb;
s = s.trim();
if (s.length() > width) { // For lang...
sb = new StringBuffer(s.substring(0, width));
int prikk = Math.min(width, 3);
for (int pos = sb.length() - 1; prikk > 0; prikk--) {
sb.setCharAt(pos--, '.');
}
} else { // for kort...
sb = new StringBuffer(s);
while (sb.length() < width) {
sb.insert(0, ' ');
}
}
return sb.toString();
}
/**
* Spesialisering av align
* @param c tegnet som skal h?yrejusteres
* @param width bredden p? feltet
* @see Format#align(String, int)
*/
public static String align(char c, int width) {
return align("" + c, width);
}
/**
* Spesialisering av align
* @see Format#align(String, int)
*/
public static String align(int n, int width) {
return align(n + "", width);
}
/**
* Spesialisering av align
* @see Format#align(String, int)
*/
public static String align(double n, int width) {
return align(n + "", width);
}
/**
* Spesialisering av align
* @throws NumberFormatException hvis
* tallet ikke lot seg formatere med decimals
* desimaler
* @see Format#align(String, int)
*/
public static String align(double n, int width, int decimals) {
return align(format(n, decimals), width);
}
/**
* Runder av flyttall til oppgitt antall desimaler.
* @return Tallet som tekst avrundet med decimals
* desimaler
* @see Format#align(String, int)
*/
public static String format(double d, int decimals) {
NumberFormat df = NumberFormat.getInstance(Locale.US);
df.setGroupingUsed(false);
df.setMaximumFractionDigits(decimals);
df.setMinimumFractionDigits(decimals);
return df.format(d);
}
/**
* Metode for venstrejustering av tekst. Teksten s venstrejusteres
* p? width plasser.
* @see Format#align(String, int)
*/
public static String alignLeft(String s, int width) {
StringBuffer sb;
if (s.length() > width) { // For lang...
sb = new StringBuffer(s.substring(0, width));
int prikk = Math.min(width, 3);
for (int pos = sb.length() - 1; prikk > 0; prikk--) {
sb.setCharAt(pos--, '.');
}
} else { // for kort - legg til blanke etter teksten.
sb = new StringBuffer(s);
while (sb.length() < width) {
sb.append(' ');
}
}
return sb.toString();
}
/**
* Spesialisering av alignLeft.
* @see Format#alignLeft(String, int)
*/
public static String alignLeft(char c, int width) {
return alignLeft(c + "", width);
}
/**
* Spesialisering av alignLeft.
* @see Format#alignLeft(String, int)
*/
public static String alignLeft(int i, int width) {
return alignLeft(i + "", width);
}
/**
* Spesialisering av alignLeft.
* @see Format#alignLeft(String, int)
*/
public static String alignLeft(double d, int width) {
return alignLeft(d + "", width);
}
/**
* Spesialisering av alignLeft.
* @see Format#alignLeft(String, int)
*/
public static String alignLeft(double d, int width, int decimals) {
return alignLeft(format(d, decimals), width);
}
/**
* Metode for sentrering av tekst. Teksten s
* sentreres p? oppgitt antall plasser.
* @see Format#align(String, int)
*/
public static String center(String s, int width) {
// F?rst - hvis teksten er for lang, fjern annenhver f?rste og
// siste bokstav:
boolean last = true;
while (s.length() > width) {
if (last) {
s = s.substring(0, s.length() - 1);
} else {
s = s.substring(1, s.length());
}
last = !last;
}
// Finn ut hvor mye kortere teksten er i forhold til
// width. Fyll p? med blanke f?rst og sist i teksten.
last = false;
while (s.length() < width) {
if (last) {
s = s + " ";
} else {
s = " " + s;
}
last = !last;
}
return s;
}
/**
* Spesialisering av center.
* @see Format#center(String, int)
*/
public static String center(char c, int width) {
return center(c + "", width);
}
/**
* Spesialisering av center.
* @see Format#center(String, int)
*/
public static String center(int i, int width) {
return center(i + "", width);
}
/**
* Spesialisering av center.
* @see Format#center(String, int)
*/
public static String center(double d, int width) {
return center(d + "", width);
}
/**
* Spesialisering av center.
* @see Format#center(String, int)
*/
public static String center(double d, int width, int decimals) {
return center(Format.format(d, decimals), width);
}
}