A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 兰海忠 黑马帝   /  2011-7-28 16:54  /  5426 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

C和C++中大家可以用scanf 和printf来实现格式化输入输出,C++中还可以通过I/O流的控制符来实现格式化输入输出,但Java是如何实现格式化输入输出呢?
[ 本帖最后由 兰海忠 于 2011-07-28  17:19 编辑 ]

1 个回复

倒序浏览
黑马网友  发表于 2011-7-28 17:25:50
沙发
格式化输出:

最简单的就是直接使用重载了的“+”来连接各种数据,这样比printf()个直观的方法。但也有缺点,太多的“+”号反而打乱所有的输出,而且输出格式不好控制。

还有一种方式是使用InputStream的format()方法,或者,如果使用的JDK版本在5.0以后的话,可以考虑相同的printf()方法。这两个方法和printf()是相同的。

格式化输入:

这个问题比较困难,我现在找到的方法都是从JDK 5.0以后引入的。而且,还是没有像scanf()那样直接替代的方法。但我们可以使用java.util.Scanner。但可惜的是

sc.nextInt();

是读取一行数据,然后转换为整数,而我们在使用scanf()时,可能会这样:

scanf("%d %d", &a, &b);

采用空格分割两个整数的输入,对比之下,java.util.Scanner类提供的方法就显得局限了。

但事实上,java.util.Scanner类提供了useDelimiter()方法来指明分割符。注意,“分割符”是使用正则表达式的形式,参看Pattern类。

如上述

scanf("%d %d", &a, &b);

替代为

sc.useDelimiter("\\s+");a=sc.nextInt();b=sc.nextInt();

来替代(假设sc是一个java.util.Scanner类对象)。注意,在Java正则表达式中,“\s”代表了[\t\n\x0B\f\r ]任一者(表示空白字符)。而“+”表示不仅仅一个,即连续的“空白字符”也可以。

详细信息参见 java.util.Scanner类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马