Je dois créer un tableau récapitulatif à la fin d'un journal avec certaines valeurs obtenues dans une classe. Le tableau doit être imprimé au format largeur fixe. J'ai déjà le code pour le faire, mais je dois limiter Strings, doubles et ints à une taille de largeur fixe codée en dur dans le code.
Alors, supposons que je veuille imprimer un tableau à largeur fixe avec
int,string,double,string
int,string,double,string
int,string,double,string
int,string,double,string
and the fixed widths are: 4, 5, 6, 6.
Si une valeur dépasse cette largeur, les derniers caractères doivent être coupés. Donc par exemple:
124891, difference, 22.348, montreal
les chaînes à imprimer doivent être:
1248 diffe 22.348 montre
Je pense que je dois faire quelque chose dans le constructeur qui force une chaîne à ne pas dépasser un certain nombre de caractères. Je vais probablement transtyper les doublons et les entrants en chaîne afin de pouvoir appliquer les exigences de largeur maximale.
Je ne sais pas quelle méthode fait cela ou si une chaîne peut être instanciée pour se comporter de cette façon. L'utilisation du formateur n'aide que pour la mise en forme fixe de l'impression de la chaîne, mais elle ne coupe pas les caractères qui dépassent la longueur maximale.
Utilisez ceci pour couper les caractères non nécessaires:
String.substring(0, maxLength);
Exemple:
String aString ="123456789";
String cutString = aString.substring(0, 4);
// Output is: "1234"
Pour vous assurer que vous n'obtenez pas d'exception IndexOutOfBoundsException lorsque la chaîne d'entrée est inférieure à la longueur attendue, procédez comme suit:
int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);
Si vous voulez que vos entiers et doubles aient une certaine longueur, alors je vous suggère d'utiliser NumberFormat pour formater vos nombres au lieu de couper leur représentation en chaîne.
Vous pouvez également utiliser String.format("%3.3s", "abcdefgh")
. Le premier chiffre est la longueur minimale (la chaîne sera laissée complétée si elle est plus courte), le deuxième chiffre est la longueur maximale et la chaîne sera tronquée si elle est plus longue. Alors
System.out.printf("'%3.3s' '%3.3s'", "abcdefgh", "a");
produira
'abc' ' a'
(vous pouvez évidemment supprimer les guillemets).
Pour la lisibilité, je préfère ceci:
if (inputString.length() > maxLength) {
inputString = inputString.substring(0, maxLength);
}
sur la réponse acceptée.
int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);
Vous pouvez utiliser la méthode statique Apache Commons StringUtils.substring(String str, int start, int end)
_, qui est également sécurisée (null safe).
Vous pouvez y arriver facilement en utilisant
shortString = longString.substring(0, Math.min(s.length(), MAX_LENGTH));
Idéalement, vous devriez essayer de ne pas modifier la représentation de données interne dans le but de créer la table. Quel est le problème avec String.format ()? Cela vous retournera une nouvelle chaîne avec la largeur requise.
La solution peut être Java.lang.String.format("%" + maxlength + "s", string).trim()
, comme ceci:
int maxlength = 20;
String longString = "Any string you want which length is greather than 'maxlength'";
String shortString = "Anything short";
String resultForLong = Java.lang.String.format("%" + maxlength + "s", longString).trim();
String resultForShort = Java.lang.String.format("%" + maxlength + "s", shortString).trim();
System.out.println(resultForLong);
System.out.println(resultForShort);
ouput:
Any string you want w
Anything short
Si vous voulez juste une longueur maximale, utilisez StringUtils.left
! Non if
ou ternary ?:
nécessaire.
int maxLength = 5;
StringUtils.left(string, maxLength);
Sortie:
null -> null
"" -> ""
"a" -> "a"
"abcd1234" -> "abcd1"