源文: 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類。