View Full Version : [Java] Formattare stringa
silvia_m
09-10-2008, 14:28
Avrei la necessità di formattare dei campi da scrivere in un file txt a tracciato fisso, che devono avere degli zeri non significativi a sinistra per tutta la lunghezza del campo.
Es: il campo è lungo 5 byte, il contenuto è 95 e deve diventare 00095.
Aiuto!!
Come faccio????
Grazie!!!
Silvia
Oceans11
09-10-2008, 14:39
Avrei la necessità di formattare dei campi da scrivere in un file txt a tracciato fisso, che devono avere degli zeri non significativi a sinistra per tutta la lunghezza del campo.
Es: il campo è lungo 5 byte, il contenuto è 95 e deve diventare 00095.
Aiuto!!
Come faccio????
Grazie!!!
Silvia
I valori di questi campi, cosa sono?interi, float? e da dove li prendi?
silvia_m
09-10-2008, 14:40
Sono stringhe che leggo da un db
Oceans11
09-10-2008, 15:13
Sono stringhe che leggo da un db
se sono "stringhe", ma contengono interi e tu puoi trattarli come tali allora basta fare così:
PrintWriter pw = new PrintWriter(new FileWriter("ciao.txt"));
String myFormat = "%1$05%d%n"; // %0 <- padding di zero
// 5 <- lunghezza totale
// %d <- formatta intero
// %n <- "\n"
pw.format(myFormat, 1);
pw.format(myFormat, 12);
pw.format(myFormat, 123);
pw.format(myFormat, 1234);
pw.format(myFormat, 12345);
pw.format(myFormat, 123456);
pw.close();
se invece sono proprio stringhe (caratteri e/o altro, non interi puri) allora ti serve un metodo che fa il padding. Da qualche parte dovrei avere scritto metodo già fatto, se ti serve la cerco :D
silvia_m
09-10-2008, 15:28
se sono "stringhe", ma contengono interi e tu puoi trattarli come tali allora basta fare così:
PrintWriter pw = new PrintWriter(new FileWriter("ciao.txt"));
String myFormat = "%1$05%d%n"; // %0 <- padding di zero
// 5 <- lunghezza totale
// %d <- formatta intero
// %n <- "\n"
pw.format(myFormat, 1);
pw.format(myFormat, 12);
pw.format(myFormat, 123);
pw.format(myFormat, 1234);
pw.format(myFormat, 12345);
pw.format(myFormat, 123456);
pw.close();
se invece sono proprio stringhe (caratteri e/o altro, non interi puri) allora ti serve un metodo che fa il padding. Da qualche parte dovrei avere scritto metodo già fatto, se ti serve la cerco :D
Nella maggior parte dei casi sono tipi String da trattare come interi.
In altri casi, non sono interi puri....
Grazie!!!!!
Oceans11
09-10-2008, 15:36
Trovato! qui (http://hwupgrade.it/forum/showthread.php?t=1316780) trovi una soluzione che a suo tempo mi offrì un altro utente del forum....basta sostituire lo spazio con un zero
buf[len++] = ' ';
deve diventare:
buf[len++] = '0';
Oceans11
09-10-2008, 15:43
Trovato! qui (http://hwupgrade.it/forum/showthread.php?t=1316780) trovi una soluzione che a suo tempo mi offrì un altro utente del forum....basta sostituire lo spazio con un zero
buf[len++] = ' ';
deve diventare:
buf[len++] = '0';
Ops.....ho toppato! scusa ma quello ti fa l'allineamento a sinistra, tu invece vuoi quello a destra! :muro:
Dammi 5 minuti e rimedio....
Oceans11
09-10-2008, 15:50
Ok, puoi usare questo metodo:
public static String rightAlign(String str, int width, char filler) {
while (str.length() < width) {
str = filler + str;
}
return str;
}
richiede la stringa da allineare, la larghezza fissa del campo, e il carattere che verrà usato per "riempire" il campo e si usa così:
System.out.println(rightAlign("ciao", 10, '0'));
banryu79
09-10-2008, 16:31
Volendo c'è anche il metodo statico formatter() (http://java.sun.com/javase/6/docs/api/) nella classe String.
In pratica ti permettere di formattare dei dati come se stessi usando la classe Formatter (http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#syntax)(a cui devi fare riferimento per capire come impostare la stringa di formattazione: sotto i flags c'è ne appunto uno per fare il padding col carattere '0', per esempio).
Oceans11
09-10-2008, 18:50
Volendo c'è anche il metodo statico formatter() (http://java.sun.com/javase/6/docs/api/) nella classe String.
In pratica ti permettere di formattare dei dati come se stessi usando la classe Formatter (http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#syntax)(a cui devi fare riferimento per capire come impostare la stringa di formattazione: sotto i flags c'è ne appunto uno per fare il padding col carattere '0', per esempio).
Sì praticamente come dicevo io, solo che format() di String restituisce una stringa, format di System.out la stampa a video, e quello di PrintWriter su file.
Se avesse a che fare con dei numeri funzionerebbe, ma con le stringhe (ho provato) no, lancia un eccezione il Formatter (sembra che quel flag per le stringhe non vadi bene).
Per le stringhe il padding lo fa lo stesso, ma con gli spazi, e mi sembra di capire che non si può sostituire il carattere di riempimento.
silvia_m
10-10-2008, 07:55
Ok, puoi usare questo metodo:
public static String rightAlign(String str, int width, char filler) {
while (str.length() < width) {
str = filler + str;
}
return str;
}
richiede la stringa da allineare, la larghezza fissa del campo, e il carattere che verrà usato per "riempire" il campo e si usa così:
System.out.println(rightAlign("ciao", 10, '0'));
PERFETTA!!!!!!! Grazie....mi hai salvato!!!!!!!!!:D :D :D :D :D
banryu79
10-10-2008, 08:34
Sì praticamente come dicevo io, solo che format() di String restituisce una stringa, format di System.out la stampa a video, e quello di PrintWriter su file.
Se avesse a che fare con dei numeri funzionerebbe, ma con le stringhe (ho provato) no, lancia un eccezione il Formatter (sembra che quel flag per le stringhe non vadi bene).
Per le stringhe il padding lo fa lo stesso, ma con gli spazi, e mi sembra di capire che non si può sostituire il carattere di riempimento.
Ah, non lo sapevo, io fin'ora mi sono trovato solo nella situazione di usarlo per tipi numerici (int/float/double) e non l'ho mai usato su stringhe.
Buono a sapersi.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.