データの入力には、Java パッケージ ライブラリのクラスが使用されます
Scanner
。 このクラスは、使用されるプログラムにインポートする必要があります。これは、プログラム コードでパブリック クラスが開始される前に行われます。このクラスには、標準入力ストリームから特定の型の次の文字を読み取るメソッドと、そのような文字の存在をチェックするメソッドがあります。入力ストリームを操作するには、 Scanner クラスのオブジェクトを作成し、作成中にどの入力ストリームに関連付けるかを指定する必要があります。Java の標準入力ストリーム (キーボード) は、オブジェクト - によって表されますSystem.in
。標準出力ストリーム (ディスプレイ) は、すでによく知られているオブジェクトですSystem.out
。エラー出力用の標準ストリームもありますSystem.err
が、それを扱うことはこのコースの範囲外です。
import java.util.Scanner; // импортируем класс
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // создаём an object класса Scanner
int i = 2;
System.out.print("Введите целое число: ");
if(sc.hasNextInt()) { // возвращает истину если с потока ввода можно считать целое число
i = sc.nextInt(); // считывает целое число с потока ввода и сохраняем в переменную
System.out.println(i*2);
} else {
System.out.println("Вы ввели не целое число");
}
}
}
hasNextDouble()
クラスのオブジェクトに適用される メソッドは、Scanner
型の実数が入力ストリームから読み取れるかどうかを確認しdouble
、メソッドはnextDouble()
それを読み取ります。最初に値を確認せずに値を読み取ろうとすると、プログラムの実行中にエラーが発生する可能性があります (デバッガはそのようなエラーを事前に検出しません)。たとえば、次のプログラムに実数を入力してみます。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double i = sc.nextDouble(); // если ввести букву s, то случится ошибка во время исполнения
System.out.println(i/3);
}
}
nextLine()
一連の文字全体を読み取ることができる 方法もあります。これは、このメソッドを通じて取得した値をクラス オブジェクトに格納する必要があることを意味しますString
。次の例では、このようなオブジェクトが 2 つ作成され、ユーザー入力が 1 つずつそれらのオブジェクトに書き込まれ、入力された文字シーケンスを組み合わせて得られる 1 つの文字列が画面に表示されます。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1, s2;
s1 = sc.nextLine();
s2 = sc.nextLine();
System.out.println(s1 + s2);
}
}
hasNext()
入力ストリームに文字が残っているかどうかを確認する メソッドもあります。このクラスには、String
文字列に適用できる便利なメソッドが多数あります (メソッド名の前に、メソッドが返す値の型を示します)。
int length()
— 文字列の長さ (文字列内の文字数) を返します。boolean isEmpty()
— 文字列が空かどうかを確認します。String replace(a, b)
— 文字 a (リテラルまたは char 型の変数) が文字 b に置き換えられた文字列を返します。String toLowerCase()
— 元の文字列内のすべての文字が小文字に変換された文字列を返します。String toUpperCase()
— 元の文字列内のすべての文字が大文字に変換された文字列を返します。boolean equals(s)
— メソッドが適用される文字列が、メソッドの引数で指定された文字列 s と一致する場合は true を返します (==
他のオブジェクトのように文字列演算子を使用して比較することはできません)。int indexOf(ch)
— 文字列内の文字 ch のインデックスを返します (インデックスは文字の序数ですが、文字には 0 から始まる番号が付けられます)。文字がまったく見つからない場合は、-1 が返されます。文字列内に文字が複数回出現する場合、最初に出現した文字のインデックスが返されます。int lastIndexOf(ch)
- 前のメソッドと似ていますが、シンボルが行内に複数回出現する場合は、最後に出現したインデックスを返します。int indexOf(ch,n)
— 文字列内の文字 ch のインデックスを返しますが、インデックス n からチェックを開始します (インデックスは文字の序数ですが、文字には 0 から始まる番号が付けられます)。char charAt(n)
— インデックス n の下の行にある文字のコードを返します (インデックスは文字のシリアル番号ですが、文字には 0 から始まる番号が付けられます)。
public class Main {
public static void main(String[] args) {
String s1 = "firefox";
System.out.println(s1.toUpperCase()); // выведет «FIREFOX»
String s2 = s1.replace('o', 'a');
System.out.println(s2); // выведет «firefax»
System.out.println(s2.charAt(1)); // выведет «i»
int i;
i = s1.length();
System.out.println(i); // выведет 7
i = s1.indexOf('f');
System.out.println(i); // выведет 0
i = s1.indexOf('r');
System.out.println(i); // выведет 2
i = s1.lastIndexOf('f');
System.out.println(i); // выведет 4
i = s1.indexOf('t');
System.out.println(i); // выведет -1
i = s1.indexOf('r',3);
System.out.println(i); // выведет -1
}
}
ユーザーがキーボードから入力した行内のすべてのスペースのインデックスを表示するプログラムの例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
for(int i=0; i < s.length(); i++) {
if(s.charAt(i) == ' ') {
System.out.println(i);
}
}
}
}
ソースへのリンク: Java の I/O ストリームと文字列
GO TO FULL VERSION