Wenn das String # -Format in Java mit einer Mischung aus Zeichen halber und voller Breite verwendet wurde, waren die Zeichenpositionen falsch ausgerichtet. Es gab keine einfache Möglichkeit, es zu lösen, selbst wenn ich zu viel nachgeschlagen hatte, also machte ich eine schnelle Funktion.
Sofort, aber die Lösung ist wie folgt. (Kopieren Sie vorerst einfach das folgende Format () und getByteLength () und fügen Sie es ein, um das Problem zu lösen.)
main
public static void main(String[] args){
//Shift Format Anweisung
System.out.println(String.format("%-20s", "Ahhhh")+" | ");
System.out.println(String.format("%-20s", "aaaaa")+" | ");
//Formatanweisung, die sich nicht verschiebt
System.out.println(format("Ahhhh", 20)+" | ");
System.out.println(format("aaaaa", 20)+" | ");
}
private static String format(String target, int length){
int byteDiff = (getByteLength(target, Charset.forName("UTF-8"))-target.length())/2;
return String.format("%-"+(length-byteDiff)+"s", target);
}
private static int getByteLength(String string, Charset charset) {
return string.getBytes(charset).length;
}
result
Ahhhh|
aaaaa |
Ahhhh|
aaaaa |
(Es ist ein Geheimnis, dass |
beim Kopieren und Einfügen in Qiita falsch ausgerichtet wurde ...)
Das Folgende ist eine Seite.
Erstens besteht der Grund, warum es einen Unterschied zwischen halber und voller Breite gibt, darin, dass sich die Anzahl der "Bytes" wie folgt unterscheidet, wenn Zeichen mit "UTF-8" ausgedrückt werden.
Also passe ich mit int byte Diff
in main
an.
Anhand der folgenden Funktion können Sie außerdem erkennen, dass Japanisch 3 Byte und Englisch 1 Byte beträgt.
analyze
public static void main(String[] args){
analyze("Ahhhh");
analyze("aaaaa");
}
private static void analyze(String target){
System.out.println("\n"+target);
int length=20;
System.out.println(format("length()", length)+":"+target.length());
System.out.println(format("UTF-8 length()", length)+":"+getByteLength(target, Charset.forName("UTF-8")));
System.out.println(format("diff", length)+":"+(getByteLength(target, Charset.forName("UTF-8"))-target.length())/2);
}
result
Ahhhh
length() :5
UTF-8 length() :15
diff :5
aaaaa
length() :5
UTF-8 length() :5
diff :0
Recommended Posts