黑马程序员技术交流社区
标题:
Java 格式化输入输出问题
[打印本页]
作者:
兰海忠
时间:
2011-7-28 16:54
标题:
Java 格式化输入输出问题
C和C++中大家可以用scanf 和printf来实现格式化输入输出,C++中还可以通过I/O流的控制符来实现格式化输入输出,但Java是如何实现格式化输入输出呢?
[
本帖最后由 兰海忠 于 2011-07-28 17:19 编辑
]
作者:
匿名
时间:
2011-7-28 17:25
格式化输出:
最简单的就是直接使用重载了的“+”来连接各种数据,这样比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类。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2