Impression avec “\t” (onglets) n'entraîne pas de colonnes alignés
J'ai un problème bizarre. Après avoir écrit cela:
for (File f : currentFile.listFiles()) {
if (f.isDirectory()){
System.out.println(f.getName()+"\t"+"Dir\t"+Command.getpremission(f)+"\t"+f.getTotalSpace());
}
else{
System.out.println(f.getName()+"\t"+"File\t"+Command.getpremission(f)+"\t"+f.getTotalSpace());
}
Je vois cet imprimé:
see.txt File rw 267642728448
see1.txt File rw 267642728456
see2.txt File rw 267642728448
Pourquoi il y a un problème avec les onglets?
Vous devez vous connecter pour publier un commentaire.
Bâtiment sur cette question, j'utilise le code suivant pour le retrait de mes messages:
C'est la sortie:
Le "problème" avec les onglets, c'est qu'ils tiret, le texte fixe onglet positions, généralement des multiples de 4 ou de 8 caractères (en fonction de la console ou de l'éditeur d'affichage). Votre premier nom de fichier est de 7 caractères, de sorte que le prochain taquet de tabulation après sa fin est à la position 8. Votre les noms de fichiers sont toutefois de 8 caractères de long, de sorte que le prochain taquet de tabulation à la position 12.
Si vous voulez vous assurer que les colonnes obtenir joliment découpée à la même position, vous devez tenir compte de la longueur réelle de colonnes précédentes, et de modifier le nombre d'onglets suivants, ou un tampon avec le nombre requis de places de la place. Ce dernier peut être réalisé en utilisant par exemple
System.out.printf
avec un spécification du format d' (par exemple"%1$13s"
spécifie une largeur minimale de 13 caractères pour afficher le premier argument est une chaîne de caractères).La longueur du texte que vous devez fournir, dans chaque ligne est différent, c'est le problème, donc si le deuxième mot est trop long (
see2.txt
est longue de 8 char qui correspond à un onglet unique longueur), il affiche un onglet qui va à la prochaine tabulation, point.Une façon de le résoudre est de programmation pour ajouter une garniture à la
f.getName()
texte de sorte que chaque texte généré:see.txt
ousee2.txt
a la même longueur (par exemplesee.txt_
etsee2.txt
) de sorte que chaque onglet est automatiquement soumise à la même tabulation point.Si vous développez avec le JDK 1.5, vous pouvez résoudre ce problème en utilisant java.util.Formateur:
cet exemple vous donne cette impression:
Dans le prolongement des observations par Péter et duncan, j'utilise normalement un rapide rembourrage méthode, quelque chose comme -
de la même manière vous pouvez avoir un
lpad()
ainsiLe problème est la longueur des noms de fichiers. Le premier nom de fichier n'est que de 7 caractères, de sorte que l'onglet se produit au char 8 (faire une tabulation après tous les 4 caractères). Les noms de fichiers sont de 8 caractères de long, de sorte que le prochain onglet ne sera pas jusqu'à ce char 12. Et si vous aviez des noms de fichiers de plus de 11 caractères, vous feriez exécuter dans le même problème à nouveau.
Comme mentionné par d'autres gens, la variable longueur de la chaîne est la question.
Plutôt que de réinventer la roue, Apache Commons dispose d'une belle, propre solution dans StringUtils.
Vous pouvez également pad d'une chaîne à la longueur souhaitée à l'aide de la Goyave est Les chaînes de caractères.padEnd(String input, int minLength, char de remplissage)
Vous pouvez utiliser cet exemple pour traiter votre problème:
Vous pouvez jouer avec le "%" jusqu'à ce que vous trouver le bon alignement pour satisfaire vos besoins