源文: http://hi.baidu.com/yfwz100/blog/item/61f8c08bf0ff79cbfd1f1098.html
從C語言轉(zhuǎn)到Java的時(shí)候,對Java的輸入輸出可能會頗為沮喪,因?yàn)镴ava沒有顯式提供scanf()/printf()的函數(shù)。
其實(shí),Java給我們提供了格式化輸入輸出的面向?qū)ο蠓绞健?/p>
格式化輸出:
最簡單的就是直接使用重載了的“+”來連接各種數(shù)據(jù),這樣比printf()個(gè)直觀的方法。但也有缺點(diǎn),太多的“+”號反而打亂所有的輸出,而且輸出格式不好控制。
還有一種方式是使用InputStream的format()方法,或者,如果使用的JDK版本在5.0以后的話,可以考慮相同的printf()方法。這兩個(gè)方法和printf()是相同的。
格式化輸入:
這個(gè)問題比較困難,我現(xiàn)在找到的方法都是從JDK 5.0以后引入的。而且,還是沒有像scanf()那樣直接替代的方法。但我們可以使用java.util.Scanner。但可惜的是
sc.nextInt();
是讀取一行數(shù)據(jù),然后轉(zhuǎn)換為整數(shù),而我們在使用scanf()時(shí),可能會這樣:
scanf("%d %d", &a, &b);
采用空格分割兩個(gè)整數(shù)的輸入,對比之下,java.util.Scanner類提供的方法就顯得局限了。
但事實(shí)上,java.util.Scanner類提供了useDelimiter()方法來指明分割符。注意,“分割符”是使用正則表達(dá)式的形式,參看Pattern類。
如上述
scanf("%d %d", &a, &b);
替代為
sc.useDelimiter("\\s+");a=sc.nextInt();b=sc.nextInt();
來替代(假設(shè)sc是一個(gè)java.util.Scanner類對象)。注意,在Java正則表達(dá)式中,“\s”代表了[\t\n\x0B\f\r ]任一者(表示空白字符)。而“+”表示不僅僅一個(gè),即連續(xù)的“空白字符”也可以。
詳細(xì)信息參見java.util.Scanner類。