源文: http://hi.baidu.com/yfwz100/blog/item/61f8c08bf0ff79cbfd1f1098.html
从C语言转到Java的时候,对Java的输入输出可能会颇为沮丧,因为Java没有显式提供scanf()/printf()的函数。
其实,Java给我们提供了格式化输入输出的面向对象方式。
格式化输出:
最简单的就是直接使用重载了的“+”来连接各种数据,这样比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类。