Java | 等幅のコンソールで文字列を一定の長さで出力
Java | 等幅のコンソールで文字列を一定の長さで出力
//
// Main クラス
//
public class Main {//
// main メソッド
//
public static void main(String[] args) {// 文字列と長さ 指定
String[] str = {"Ruby ルビー", "サフィー Sapphie", "Garnet ガーネット", "ペリドット Peridot"};
int len = 11;// printf だと上手くいかない
System.out.println("■printf だと上手くいかない");
for (String s: str) {System.out.print("[");
// 文字数の最大・最少を len にする
System.out.printf("%-" + len + "." + len + "s", s);System.out.println("]");
}
System.out.println();
// 文字幅をちゃんと判定
System.out.println("■文字幅をちゃんと判定");
for (String s: str) {System.out.print("[");
// 半角 len 文字分の幅で文字列出力
printn(s, len);System.out.println("]");
}
}
//
// 半角 len 文字分の幅で文字列出力
//
static void printn(String s, int len) {int l = 0;
// 1 文字ずつ出力
for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);
// ( 英数字 ) ( \ 記号 ) ( ~ 記号 ) ( 半角カナ )
if ((c <= '\u007e') || (c == '\u00a5') || (c == '\u203e') || (c >= '\uff61' && c <= '\uff9f')) {
l++;
if (l > len) {
l--;
break;
}
} else { // その他 (全角)
l += 2;
if (l > len) {
l -= 2;
break;
}
}System.out.print(c);
}
// 長さが足りなかった場合は半角スペースで埋める
if (l < len) {
System.out.printf("%" + (len - l) + "s", "");
}}
}
文字列が短すぎる場合 … スペースで埋める
文字列が長すぎる場合 … 途中で切る。ただし、全角文字がハミ出した場合は半角スペースで調整