入力から数値を解析する
テキストを数値に変換します。
「入力から数値を解析する」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
行は常にString
readLine()は、ユーザーが42と入力した場合でも、常にStringを返します。計算を行うには、そのテキストを数値にパースする必要があります。
Javaには、この目的のためにInteger.parseIntやDouble.parseDoubleなどのヘルパーメソッドが用意されています。
Integer.parseInt
Integer.parseInt(String)は、"42"のようなテキストをint型の値42に変換します。
パースした後は、通常の数値と同じように加算、乗算、比較ができます。
String text = "42";
int n = Integer.parseInt(text);
System.out.println(n + 1);実行可能なパース例
ハードコードされた文字列をパースして2倍にする、完全な実行可能プログラムを見てみましょう。
System.inから読み取らないため、すぐに実行でき、結果が表示されます。
public class Main {
public static void main(String[] args) {
String text = "21";
int n = Integer.parseInt(text);
System.out.println("Doubled: " + (n * 2));
}
}読み取ってからパースする
実際のパターンは、行を読み取ってからパースするというものです。このプログラムはコンソールから数値を1つ読み取り、その平方を表示します。
System.inで待機するため、ここでは自動実行できませんが、日常的によく使うパターンです。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
System.out.println("Square: " + (n * n));
}
}パースする前にtrimする
余分な空白があるとパースに失敗します。Integer.parseInt(" 42 ")はエラーをスローしますが、Integer.parseInt(" 42 ".trim())は正常に動作します。
パースする前に行に対してtrim()を呼び出すことを習慣にするとよいでしょう。
String raw = " 7 ";
int n = Integer.parseInt(raw.trim());
System.out.println(n);小数をパースする
小数にはDouble.parseDoubleを使用します。"3.14"のようなテキストをdoubleに変換します。
intの範囲を超える非常に大きな整数には、Long.parseLongも使用できます。
public class Main {
public static void main(String[] args) {
double pi = Double.parseDouble("3.14");
System.out.println(pi * 2);
}
}1行に複数の数値
多くの場合、"10 20 30"のように、1行に複数の数値が空白で区切られて含まれています。split(" ")を使用して、Stringのトークン配列に分割します。
その後、各トークンを個別にパースします。
String[] parts = "10 20 30".split(" ");
int a = Integer.parseInt(parts[0]);
int b = Integer.parseInt(parts[1]);
System.out.println(a + b);分割した数値を合計する
この実行可能なプログラムは、行を分割し、ループ内ですべての数値を加算します。
入力なしで実行できるように文字列をハードコードしていますが、実際にコンソールを使う場合はbr.readLine()に置き換えてください。
public class Main {
public static void main(String[] args) {
String line = "5 8 2 10";
String[] parts = line.split(" ");
int sum = 0;
for (String p : parts) {
sum += Integer.parseInt(p);
}
System.out.println("Sum: " + sum);
}
}不正な入力では例外が発生する
テキストが"hello"や空の文字列のように有効な数値でない場合、parseIntはNumberFormatExceptionをスローします。
try/catchを使ってこれを防ぎ、不正な入力でプログラムがクラッシュしないようにできます。
try {
int n = Integer.parseInt("hello");
} catch (NumberFormatException e) {
System.out.println("Not a number!");
}安全なパースの実例
クラッシュする代わりに不正な入力を適切に処理する、実行可能なプログラムを見てみましょう。
テキストを数値に変換できない場合、catchブロックが分かりやすいメッセージを表示します。
public class Main {
public static void main(String[] args) {
String input = "12x";
try {
int n = Integer.parseInt(input);
System.out.println(n);
} catch (NumberFormatException e) {
System.out.println("Invalid number: " + input);
}
}
}パースのチェックリスト
入力を数値に変換するとき:
- 整数には
Integer.parseInt、小数にはDouble.parseDoubleを使います。 - まず
trim()で余分な空白を取り除きます。 - 1行に複数の数値がある場合は
split(" ")を使います。 - 安全のため
try/catchで囲みます。
クイックチェック
解析に失敗すると何が起こるか考えてみましょう。
まとめ
入力行は文字列であり、Integer.parseInt または Double.parseDouble で解析することを学びました。trim() と split(" ") を使い、安全のために NumberFormatException を捕捉しました。
次は、ストリームを正しく閉じる方法です。
よくある質問
「入力から数値を解析する」レッスンは無料ですか?
はい。「入力から数値を解析する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「入力から数値を解析する」で何を学びますか?
テキストを数値に変換します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「入力から数値を解析する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- BufferedReaderを使う理由
- 行の読み取り
- 入力から数値を解析する
- ストリームを安全に閉じる