Java Language
コンソールI / O
サーチ…
コンソールからユーザー入力を読み込む
BufferedReader
使用:
System.out.println("Please type your name and press Enter.");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
String name = reader.readLine();
System.out.println("Hello, " + name + "!");
} catch(IOException e) {
System.out.println("An error occurred: " + e.getMessage());
}
このコードには、次のインポートが必要です。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
Scanner
使用:
System.out.println("Please type your name and press Enter");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.println("Hello, " + name + "!");
この例では、次のインポートが必要です。
import java.util.Scanner;
複数の行を読み取るには、 scanner.nextLine()
繰り返し呼び出しscanner.nextLine()
。
System.out.println("Please enter your first and your last name, on separate lines.");
Scanner scanner = new Scanner(System.in);
String firstName = scanner.nextLine();
String lastName = scanner.nextLine();
System.out.println("Hello, " + firstName + " " + lastName + "!");
Strings
nextLine()
、 next()
およびnextLine()
を取得する方法は2つあります。 next()
は最初のスペース(「トークン」とも呼ばれる)までテキストを返し、 nextLine()
はユーザーがenterを押すまで入力したすべてのテキストを返します。
Scanner
は、 String
以外のデータ型を読み取るためのユーティリティメソッドも提供します。これらには、
scanner.nextByte();
scanner.nextShort();
scanner.nextInt();
scanner.nextLong();
scanner.nextFloat();
scanner.nextDouble();
scanner.nextBigInteger();
scanner.nextBigDecimal();
これらの方法のいずれかを付けるhas
(とhasNextLine()
、 hasNextInt()
を返しtrue
ストリームが要求タイプの任意の複数を持っている場合。注:これらのメソッドは、入力が要求された型でない場合(たとえば、 nextInt()
"a"を入力するなど)、プログラムをクラッシュさせます。これを防ぐためにtry {} catch() {}
を使うことができます( 例外 : 例外を参照)
Scanner scanner = new Scanner(System.in); //Create the scanner
scanner.useLocale(Locale.US); //Set number format excepted
System.out.println("Please input a float, decimal separator is .");
if (scanner.hasNextFloat()){ //Check if it is a float
float fValue = scanner.nextFloat(); //retrive the value directly as float
System.out.println(fValue + " is a float");
}else{
String sValue = scanner.next(); //We can not retrive as float
System.out.println(sValue + " is not a float");
}
System.console
使用:
String name = System.console().readLine("Please type your name and press Enter%n");
System.out.printf("Hello, %s!", name);
//To read passwords (without echoing as in unix terminal)
char[] password = System.console().readPassword();
利点 :
- 読み込み方法が同期されている
- 書式文字列構文を使用できます
注意 :これは、プログラムが実際のコマンドラインから実行され、標準入出力ストリームをリダイレクトしない場合にのみ機能します。プログラムがEclipseなどの特定のIDE内から実行されているときは機能しません。 IDE内とストリームリダイレクトで動作するコードについては、他の例を参照してください。
基本的なコマンドライン動作の実装
基本的なプロトタイプや基本的なコマンドラインの動作については、次のループが便利です。
public class ExampleCli {
private static final String CLI_LINE = "example-cli>"; //console like string
private static final String CMD_QUIT = "quit"; //string for exiting the program
private static final String CMD_HELLO = "hello"; //string for printing "Hello World!" on the screen
private static final String CMD_ANSWER = "answer"; //string for printing 42 on the screen
public static void main(String[] args) {
ExampleCli claimCli = new ExampleCli(); // creates an object of this class
try {
claimCli.start(); //calls the start function to do the work like console
}
catch (IOException e) {
e.printStackTrace(); //prints the exception log if it is failed to do get the user input or something like that
}
}
private void start() throws IOException {
String cmd = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (!cmd.equals(CMD_QUIT)) { // terminates console if user input is "quit"
System.out.print(CLI_LINE); //prints the console-like string
cmd = reader.readLine(); //takes input from user. user input should be started with "hello", "answer" or "quit"
String[] cmdArr = cmd.split(" ");
if (cmdArr[0].equals(CMD_HELLO)) { //executes when user input starts with "hello"
hello(cmdArr);
}
else if (cmdArr[0].equals(CMD_ANSWER)) { //executes when user input starts with "answer"
answer(cmdArr);
}
}
}
// prints "Hello World!" on the screen if user input starts with "hello"
private void hello(String[] cmdArr) {
System.out.println("Hello World!");
}
// prints "42" on the screen if user input starts with "answer"
private void answer(String[] cmdArr) {
System.out.println("42");
}
}
コンソールでの文字列の整列
メソッドPrintWriter.format
( System.out.format
を通じて呼び出されます)を使用して、整列した文字列をコンソールにSystem.out.format
することができます。このメソッドは、フォーマット情報とフォーマットする一連のオブジェクトを含むString
を受け取ります。
String rowsStrings[] = new String[] {"1",
"1234",
"1234567",
"123456789"};
String column1Format = "%-3s"; // min 3 characters, left aligned
String column2Format = "%-5.8s"; // min 5 and max 8 characters, left aligned
String column3Format = "%6.6s"; // fixed size 6 characters, right aligned
String formatInfo = column1Format + " " + column2Format + " " + column3Format;
for(int i = 0; i < rowsStrings.length; i++) {
System.out.format(formatInfo, rowsStrings[i], rowsStrings[i], rowsStrings[i]);
System.out.println();
}
出力:
1 1 1
1234 1234 1234
1234567 1234567 123456
123456789 12345678 123456
固定サイズの書式文字列を使用すると、文字列を固定サイズの列の表のような外観で印刷することができます。
String rowsStrings[] = new String[] {"1",
"1234",
"1234567",
"123456789"};
String column1Format = "%-3.3s"; // fixed size 3 characters, left aligned
String column2Format = "%-8.8s"; // fixed size 8 characters, left aligned
String column3Format = "%6.6s"; // fixed size 6 characters, right aligned
String formatInfo = column1Format + " " + column2Format + " " + column3Format;
for(int i = 0; i < rowsStrings.length; i++) {
System.out.format(formatInfo, rowsStrings[i], rowsStrings[i], rowsStrings[i]);
System.out.println();
}
出力:
1 1 1
123 1234 1234
123 1234567 123456
123 12345678 123456
フォーマット文字列の例
-
%s
:フォーマットされていない文字列 -
%5s
:文字列を最低 5文字でフォーマットします。文字列が短い場合には、整列5つの文字と右側にパディングされます -
%-5s
:文字列を最低 5文字でフォーマットします。文字列が短い場合には、5つの文字にパディングされ 、 左詰めされます -
%5.10s
:5文字以上 10文字までの文字列の書式を、文字列が5より短い場合には、5つの文字と、右揃えに埋められます。文字列が10よりも長い場合には、10の文字揃え右に切り捨てられます -
%-5.5s
:文字列を固定長5文字でフォーマットします(最小値と最大値は等しい)。文字列が5より短い場合には、5つの文字にパディングされ 、 左詰めされます。文字列が5よりも長い場合には、5つの文字に切り捨てられ 、 左詰めされます