JAVA按格式输出字符串

假如我希望一次性输出这样的格式
Math 128
English 127
要一次性用JOptionMessageDialog(null, msg);输出
String msg要怎么写?
我试了

String msg = String.format(“%-15s%-10s%n%-15s%-10s%n", "Math", mathScore, "Englsih", englishScore);

但是不行, 死活不能对齐。
格式上左对齐右对齐无所谓, 空几个格也无所谓, 只要能对齐那个数字就好了, 就两列, 可能会有更多行。
等一下,不能右对齐...
那个是
JOptionPane.showMessageDialog(null, msg);
手急打快了

在Java编程中格式化字符串,用String类的静态方法String.format():

format(Locale l, String format, Object... args) 
//使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
format(String format, Object... args) 
//使用指定的格式字符串和参数返回一个格式化字符串。

举几个这个方法实用的例子(注释是输出结果):

//案例1
long now = System.currentTimeMillis();
String s = String.format("%tR",now);   //输出当前时间的小时和分钟
// æ ¼å¼åŒ–输出结果"09:22"

//案例2
Date d = new Date(now);
s = String.format("%tD",d);   //输出当前时间的month/day/year      
// æ ¼å¼åŒ–输出结果"11/05/15"
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-11
你这种要求要用html格式来显示才行 ,swing组件支持用制表符等特殊符号的组件不多,比如JTextArea、JtextPane等;如果要在面板上直接显示,需要用html来显示;
第2个回答  2013-06-11
你可以使用\t这个字符,\t表示一个TAB字符,你可以在字符串后面用一个或者两个来控制。
第3个回答  推荐于2017-12-15
我刚试了一下你的代码,在控制台打印出来是对齐的,很明显是OptionPane使用的默认字体在显示时的宽度不一致的问题,所以换个显示字体就可以了,代码:
int mathScore=128;
int englishScore=127;

String msg = String.format("%-15s%s%n%-15s%s", "Math", mathScore,
"English", englishScore);
System.out.println(msg);
JTextArea jTextArea=new JTextArea();

//method1:
jTextArea.setFont(new Font("宋体", Font.PLAIN, 20));//换个字体才能保证宽度
jTextArea.setBackground(new JOptionPane().getBackground());//颜色有差异
jTextArea.setText(msg);
JOptionPane.showMessageDialog(null, jTextArea);

//method2:
JOptionPane jiptionPane = new JOptionPane();
jiptionPane.setFont(new Font("宋体", Font.PLAIN, 20));//字体为宋体
JOptionPane.showMessageDialog(null, "Math \n English");本回答被提问者采纳
相似回答