- ベストアンサー
JAVAでの文字表示について
今、netBeansでプログラムを作成しています。 JAVAは初心者レベルです。 TextAreaにappendで配列等から文字を表示させたいのですが、 例えば、 ************** テレビ 10000円 ビデオデッキ 5000円 DVDプレイヤー 4000円 ************* のように表示させたいです。 テレビ、ビデオデッキなど文字数が違う物をC言語のprintfで10%sのように空白を表示させる方法はあるのでしょうか? また、他の方法でも何か無いでしょうか? くだらない質問で恐縮ですがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 標準で提供される機能を探しているようなので、参考にならないかもしれませんが、文字数を揃える処理は2行程度で実現できます。 ただ、文字コードがShift-JIS以外だとうまくいかない可能性もあります。 ================================================== import java.awt.*; import javax.swing.*; public class Test extends JFrame { public static void main(String[] args) { Test test = new Test(); test.setVisible(true); } // 右に空白を入れてサイズを揃える public static String fixSize(String text, int size) { int addSpaceNum = size - text.getBytes().length; for(int i = 0; i < addSpaceNum; i++) text += " "; return text; } // 左に空白を入れてサイズを揃える public static String fixRight(String text, int size) { int addSpaceNum = size - text.getBytes().length; for(int i = 0; i < addSpaceNum; i++) text = " " + text; return text; } public Test() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTextArea textArea = new JTextArea(30, 30); textArea.setFont(new Font("MS ゴシック", Font.PLAIN, 12)); this.getContentPane().add(textArea, BorderLayout.CENTER); this.setSize(400, 300); String[] items = {"テレビ", "ビデオデッキ", "DVDプレイヤー"}; String[] prices = {"10000円", "5000円", "4000円"}; for(int i = 0; i < items.length; i++) { textArea.append(Test.fixSize(items[i], 15)); // 商品名を半角15文字で揃える textArea.append(Test.fixRight(prices[i], 15) + "\n"); // 金額を半角15文字右寄せで揃える } } }
その他の回答 (2)
- bgbg
- ベストアンサー率53% (94/175)
5.0なら、Formatterクラスを使えばCのprintfと同じようなフォーマットが使えます。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Formatter.html (System.out.printfはこのクラスを利用して実装されています) しかし、文字列長の最小指定値は(最終的に出力される)バイト単位ではなく文字数単位なので、日本語文字を含む文字列でのフォーマットはうまく幅が揃いません。 これはFormattableインターフェースを備えた独自クラスを作り、バイト単位でのフォーマットを自力で実装する必要があります。 以下に紹介するURLとNo.2の回答を組み合わせると実現できると思います。 http://www.javaworld.jp/technology_and_programming/-/21161.html
- Hardking
- ベストアンサー率45% (73/160)
C言語の書式付き入出力関数printf ↓ JavaJ2SE 5.0より、Javaでも実装可能になりました。 Systemクラスのprintfメソッドです。 System.out.printf
お礼
ご回答ありがとうございます。 テキストエリアに表示させたいのでsetTextやappend等で表示させる方法は無いでしょうか? 質問の表がおかしいのですが、***円の円を揃えたいので商品名と円の間の空白を合わせたいのです。 考えているのは、文字数をカウントして空白を足りない分足して表示させる方法なんですが、もっとシンプルな方法があったらお願いいたします。
お礼
ご回答ありがとうございました。 この方法を使わせていただこうと思います。 本当にありがとうございました。