posts - 195,  comments - 30,  trackbacks - 0

源文:  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类


http://download.oracle.com/javase/7/docs/api/java/util/Scanner.html

posted on 2011-11-17 10:57 luis 阅读(2759) 评论(0)  编辑 收藏 引用 所属分类: Java笔记

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

友情链接

搜索

  •  

最新评论

阅读排行榜

评论排行榜