Hallo Zusammen,
Eine allgemeine Frage habe ich zum Thema String-Formatierung, die ich unten noch mal (wer langeweile hat) etwas konkreter gemacht habe:
Allgemeines Problem
Der Befehlt String.format formatiert mir das übergebene Object anhand des ebenfalls übergebenen Patterns:
Problem: "null"-werte. Kann man im Format-Pattern festlegen das er statt "null" zu schreiben Leerstrings in der angegebenen Länge ausgibt?
Danke schon mal für alle Leser bis hier her. Warum und Wesshalb und Wieso ich das so will:
Konkret
Ich möchtere mehrer Dateien mit fester Satzlänge schreiben, dazu habe ich mir folgendes "Konstrukt" ausgedacht welches mir das ganze (meiner bescheidenen Meinung nach) vereinfacht und etwas dynamischer hält ohne zu komplex zu werden.
Beschreibung:
Ich habe eine handvoll Formatierungen (über alle Nachrichten gleich) definiert die hintereinander weg bestimmte Dateiaufbauten darstellen
Methode zum formatieren der übergebenen Elemente
Ein kleines Beispiel
Das funktioniert soweit (fast), Null-Werte werden leider als "null" beschrieben, was ich eher als Leer-String haben müsste. ("null" kann ich auch nicht durch String-Replace ersetzen, da mir dadurch ja die Feldlängen verloren gingen.
Um in dem Schema zu bleiben (es sei denn jemand kräuselt es bei meinem Design die Fußnägel) müsste ich also im String-Format-Pattern festlegen das "null" nicht geschrieben wird sondern die entsprechenden leer-zeichen.
Viele Grüße
Dom
Eine allgemeine Frage habe ich zum Thema String-Formatierung, die ich unten noch mal (wer langeweile hat) etwas konkreter gemacht habe:
Allgemeines Problem
Der Befehlt String.format formatiert mir das übergebene Object anhand des ebenfalls übergebenen Patterns:
Java:
String.format("%03d",1); // = '001'
Problem: "null"-werte. Kann man im Format-Pattern festlegen das er statt "null" zu schreiben Leerstrings in der angegebenen Länge ausgibt?
Java:
String.format("%03d",null); // = 'null'
soll aber zu: = ' '
Danke schon mal für alle Leser bis hier her. Warum und Wesshalb und Wieso ich das so will:
Konkret
Ich möchtere mehrer Dateien mit fester Satzlänge schreiben, dazu habe ich mir folgendes "Konstrukt" ausgedacht welches mir das ganze (meiner bescheidenen Meinung nach) vereinfacht und etwas dynamischer hält ohne zu komplex zu werden.
Beschreibung:
Ich habe eine handvoll Formatierungen (über alle Nachrichten gleich) definiert die hintereinander weg bestimmte Dateiaufbauten darstellen
Java:
public class LineFormat {
private static String NUMBER_3="%03d";
private static String NUMBER_2="%02d";
private static String CHAR_40="%1$-40s";
private static String CHAR_8="%1$-8s";
private static String CHAR_20="%1$-20s";
private static String CHAR_70="%1$-70s";
private static String CHAR_14="%1$-70s";
private static String CHAR_1="%1$-1s";
private static HashMap<String, String[]> FORMATS = new HashMap<String, String[]>() {
{
put("100",new String[]{NUMBER_3,CHAR_40,NUMBER_2,CHAR_14,CHAR_8,CHAR_70,CHAR_20,CHAR_40,CHAR_1});
//....
}
};
Methode zum formatieren der übergebenen Elemente
Java:
public static String getFormattedString(String messageID,Object[] elements){
String[] formatString=FORMATS.get(messageID);
StringBuffer bufferedString=new StringBuffer();
for (int i=0;i<formatString.length;i++){
try{
bufferedString.append(String.format(formatString[i], elements[i]));
bufferedString.append(";");
} catch (IndexOutOfBoundsException ex){
System.out.printf("Number of elements (%d) does not match expected format-length(%d)",elements.length,formatString.length);
return null;
}
}
return bufferedString.toString();
}
Ein kleines Beispiel
Java:
public static void main(String[] args) {
Object[] elements=new Object[9];
elements[0]=100;
elements[1]="Eine Dok Id";
elements[3]=00;
elements[8]='L';
System.out.println(LineFormat.getFormattedString("100", elements));
}
Das funktioniert soweit (fast), Null-Werte werden leider als "null" beschrieben, was ich eher als Leer-String haben müsste. ("null" kann ich auch nicht durch String-Replace ersetzen, da mir dadurch ja die Feldlängen verloren gingen.
Um in dem Schema zu bleiben (es sei denn jemand kräuselt es bei meinem Design die Fußnägel) müsste ich also im String-Format-Pattern festlegen das "null" nicht geschrieben wird sondern die entsprechenden leer-zeichen.
Viele Grüße
Dom