質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

7952閲覧

タブ(¥t)を使用して、列を揃えて一行ずつ表示する方法

ayaka.n

総合スコア24

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/08/29 09:45

社員管理のコンソールアプリケーションで検索機能を実装しました。
検索結果の表示を列をそろえて表示させたいのですが、うまく実装できません。
社員ID、性別、生年月日、部署名は揃うのですが、社員名のみ揃いません。
何か効果的な実装方法はございますでしょうか?

↓コンソール上の検索結果
社員ID 社員名 性別 生年月日 部署名
6 鈴木 太郎 男性 1986/10/12 営業部
8 渡辺 花子 女性 1988/04/23 総務部
7 田中 二郎 男性 1978/07/02 総務部

↓コード

System.out.println("社員ID\t社員名\t性別\t生年月日\t部署名"); while (resultSet.next()) { System.out.print(resultSet.getString("emp_id") + "\t"); System.out.print(resultSet.getString("emp_name") + "\t"); int gender = Integer.parseInt(resultSet.getString("gender")); if (gender == 1) { System.out.print("男性\t"); } else if (gender == 2) { System.out.print("女性\t"); } System.out.print(resultSet.getString("birthday") + "\t"); System.out.println(resultSet.getString("dept_name")); rowCount++; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/08/29 09:47

揃わないとはどういうふうになるんでしょうか。 問題が見えません
itagagaki

2021/08/29 10:00

1行目のヘッダと2行目以降とで位置が揃わないということですか? まあ、タブっていうのは、そういうものだと思いますが…。 この出力をファイルにリダイレクトしてtsvファイルとしてスプレッドシートにインポートすれば、スプレッドシートの列では揃うのではないでしょうか。
pepperleaf

2021/08/29 10:16

社員IDの数字の出力を書式付にして、"社員ID" と同じ文字幅にしましょう。 最近、Java使ってないので、ちょっとコードが出ない、、、とこちらへ ... あっと、出力を見ると、生年月日の文字幅も要検討。多分、"生年月日"の幅が狭いので、次の部署名が合わない事になりそう。同様に、空白の追加が必要か。 ちょっと気になるのが、タブ幅 4文字分でしょうか? エディタ等で変更可ですが、標準は、8文字分じゃなかったか。
otn

2021/08/29 10:18

出力イメージもコードブロックに書きましょう。 ・期待する出力 ・実際の出力 それぞれ。
guest

回答3

0

ベストアンサー

いい加減なやり方

Java

1class Main { 2 public static void main(String[] args) { 3 String[][] a = { 4 { "6", "鈴木 太郎", "男性", "1986/10/12", "営業部" }, 5 { "8", "渡辺 花子", "女性", "1988/04/23", "総務部" }, 6 { "7", "田中 二郎", "男性", "1978/07/02", "総務部" }, 7 { "8", "原 敬", "男性", "1856/03/15", "政治部" }, 8 { "9", "太田 光", "男性", "1965/05/13", "漫才部" }, 9 { "10", "大河内 伝次郎", "男性", "1898/02/05", "演劇部" }, 10 }; 11 12 System.out.println("社員ID\t" + w16("社員名") 13 + "性別\t生年月日\t部署名"); 14 for (int i = 0; i < a.length; i++) 15 System.out.println(a[i][0] + "\t" + w16(a[i][1]) 16 + a[i][2] + "\t" + a[i][3] + "\t" + a[i][4]); 17 } 18 19 static String w16(String s) { 20 int len = 0; 21 for (int i = 0; i < s.length(); i++) 22 len += s.charAt(i) >= 0x3000 ? 2 : 1; 23 return s + (len < 8 ? "\t\t" : "\t"); 24 } 25}

タブ8 のコンソールでの実行結果

text

1社員ID 社員名 性別 生年月日 部署名 26 鈴木 太郎 男性 1986/10/12 営業部 38 渡辺 花子 女性 1988/04/23 総務部 47 田中 二郎 男性 1978/07/02 総務部 58 原 敬 男性 1856/03/15 政治部 69 太田 光 男性 1965/05/13 漫才部 710 大河内 伝次郎 男性 1898/02/05 演劇部

投稿2021/08/29 12:59

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

タブ(\t)を空白いくつ分として扱うのか(タブストップの位置)は環境によってことなりますからね。
提示されたデータの中で一番長いのは生年月日の空白10文字分。なので、tabsコマンド https://nxmnpg.lemoda.net/ja/1/tabs で、tabs 11とすれば、ヘッダ部もデータ部も私のコンソールでは開始位置が揃いました。
なお、コンソールが表示用に使っているフォントの設定によっては、調整が必要かもしれませんし、寿限無寿限無…長久命の長助さんが在職されているときは、もっと調整が必要…

投稿2021/08/29 12:36

shiketa

総合スコア4041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

↓コンソール上の検索結果

社員ID 社員名 性別 生年月日 部署名
6 鈴木 太郎 男性 1986/10/12 営業部
8 渡辺 花子 女性 1988/04/23 総務部
7 田中 二郎 男性 1978/07/02 総務部

これを見る限り、

社員ID、性別、生年月日、部署名は揃うのですが、社員名のみ揃いません。

社員名も揃ってるとしか見えません。

問題はなんでしょうか。

投稿2021/08/29 10:48

y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問