Javaでフォームの入力値を数値に変換するには?文字列と数値の違いを理解する

本記事は、Schooの「Java入門 中級【2026年版】」第4回「Webアプリケーションの動作原理と画面連携」に対応しています。フォームから受け取った値を、Javaで計算に使うまでの流れを整理します。
フォームの入力値は、リクエストから基本的に文字列として取得します。数量の欄に 3 と入力しても、request.getParameter("quantity") が返す値は、整数の 3 ではなく String 型の "3" です。計算に使うには、受け取った文字列を数値に変換します。
ここでは「単価500円の商品を3個購入したら、合計はいくらか」を例に、取得・変換・計算のつながりを見ていきます。
Schoo コースページ:Java入門 中級【2026年版】
数字を入力しても、取得した値はString型
入力画面で使う type="number" は、ブラウザに数値用の入力欄を表示させる指定です。サーバー側のJava変数を int 型にする指定ではありません。
<input type="number" name="quantity">
この欄に3を入力して送信すると、サーバー側では次のように受け取ります。
String quantityText = request.getParameter("quantity");
// quantityText の値は文字列の "3"
getParameter() の戻り値の型は String です。GETでもPOSTでも、このメソッドで取得したフォームの値は文字列です。指定した名前のパラメータが送られていない場合には null が返ります。
このように、フォームから送信され、名前を指定して取り出す値をリクエストパラメータと呼びます。
<input type="number" name="quantity">String quantityText =
request.getParameter(
"quantity");"3" String型 / quantityTextInteger.parseInt(quantityText);
引用符はJavaの文字列を表すための表記です。入力欄に引用符を付けて送信するわけではありません。
文字列のままだと、足し算ではなく連結になる
見た目が数字でも、文字列は計算用の数値ではありません。違いがわかりやすいのが + の動きです。
String priceText = "100";
String shippingText = "20";
System.out.println(priceText + shippingText); // 10020
int price = Integer.parseInt(priceText);
int shipping = Integer.parseInt(shippingText);
System.out.println(price + shipping); // 120
"100" + "20""10020"また、文字列の quantityText に対して 500 * quantityText と書くと、コンパイルエラーになります。掛け算の前に、数量を数値として用意する必要があります。
Integer.parseInt()で文字列をintに変換する
Integer.parseInt() は、整数を表す文字列を読み取り、int 型の値を返すメソッドです。取得・変換・計算を別々の行にすると、それぞれの役割が見えます。
// 1. フォームの数量を文字列として取得する
String quantityText = request.getParameter("quantity");
// 2. 整数に変換して、別の変数に受け取る
int quantity = Integer.parseInt(quantityText);
// 3. 数値を使って計算する
int unitPrice = 500;
int total = unitPrice * quantity;
数量が "3" の場合、quantity に 3、total に 1500 が入ります。元の quantityText は文字列のままです。元の変数の型を変えるのではなく、変換結果を別の変数に受け取っています。
この短い例は、正しい整数が送られた場合の流れです。実際の入力には未入力や文字もあるため、後半でチェックを加えます。なお、(int) quantityText というキャストでは、文字列を整数として読み取れません。
フォームから数量を送り、合計金額を表示する
入力画面を quantity-form.html、送信先を total.jsp とします。単価はサーバー側で500円と決め、フォームからは数量だけを送ります。販売価格を利用者の入力値に任せないためです。
<form action="total.jsp" method="post">
<p>単価:500円</p>
<label>
数量(1〜99個)
<input type="number" name="quantity"
min="1" max="99" step="1" required>
</label>
<button type="submit">合計金額を確認</button>
</form>
name="quantity" が、受け取り側の getParameter("quantity") と対応します。3個で送信した場合の表示は「合計金額は1500円です。」です。
未入力・変換できない値・範囲外を分けて考える
この画面の要件は「数量は必須、1〜99個の整数」です。入力の確認には、次の3つの段階があります。
- 値があるか:パラメータがない
nullと、空文字列""を確認する。 - 整数として読めるか:
"abc"や"3.5"はintに変換できない。 - 注文できる数量か:
0や100は整数に変換できても、1〜99個という要件を満たさない。
| 取得した値 | 判断 | 処理 |
|---|---|---|
"3" | 有効な数量 | 1,500円と計算 |
"" / null | 入力・送信がない | 入力を求める |
"abc" / "3.5" | 整数に変換できない | 整数の入力を求める |
"0" / "100" | 数量の範囲外 | 1〜99個の入力を求める |
変換できない文字列を Integer.parseInt() に渡すと、NumberFormatException が通知されます。int の範囲を超える "2147483648" も同じです。try-catch で受け取り、入力を直してもらうメッセージにします。
ブラウザの required や min、max は入力時の手助けになりますが、サーバーへ別の値が直接送られることもあるので、受け取る側でも確認します。
チェックを含めた受け取り側のコード
次が total.jsp の全体です。画面の作り方よりも、文字列で取得 → 未入力を確認 → 整数に変換 → 範囲を確認 → 計算の順に注目してください。
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%
request.setCharacterEncoding("UTF-8");
String quantityText = request.getParameter("quantity");
int unitPrice = 500;
String message;
if (quantityText == null || quantityText.trim().isEmpty()) {
message = "数量を入力してください。";
} else {
try {
int quantity = Integer.parseInt(quantityText.trim());
if (quantity < 1 || quantity > 99) {
message = "数量は1〜99個で入力してください。";
} else {
int total = unitPrice * quantity;
message = "合計金額は" + total + "円です。";
}
} catch (NumberFormatException e) {
message = "数量は1〜99の整数で入力してください。";
}
}
%>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>合計金額</title>
</head>
<body>
<p><%= message %></p>
</body>
</html>
trim() は前後の空白を除きます。この例では " 3 " を3個として扱い、空白だけなら未入力とします。先に null を確認しているので、値がない場合に trim() を呼び出すこともありません。
数量を整数にできても、範囲外なら計算しません。変換に失敗した場合も同様です。入力できていない値を勝手に0に置き換えて処理を続けるのではなく、何を直す必要があるかを表示します。
数字でできていても、すべて数値に変換するわけではない
電話番号や郵便番号、会員番号は、計算する量ではなく識別のための値です。たとえば "0012" を整数にすると 12 になり、先頭の0が失われます。計算する数量なのか、文字列として保持する番号なのかで判断します。
確認問題
1枚800円のチケットの合計金額を計算します。フォームの name="count" から枚数を受け取り、1〜5枚の整数だけを受け付ける要件です。
- 入力欄に2と入力したとき、
request.getParameter("count")の戻り値の型と値は何ですか。 - 枚数を文字列として取得し、整数に変換して合計金額を計算する3行を書いてください。この設問では有効な値が届くものとします。
""、"two"、"6"が届いた場合、それぞれ「未入力」「変換できない」「範囲外」のどれに当たりますか。- 未入力・変換失敗・範囲外では計算せず、1〜5枚の場合だけ合計金額を表示する処理を書いてください。
演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。
まとめ
- フォームの値は、
getParameter()で基本的に文字列として取得する。数字を入力してもString型。 - 計算する整数には
Integer.parseInt()を使い、変換結果をint型の変数に受け取る。 - 値があるか、整数として読めるか、要件の範囲内かを順に確認する。
- 電話番号のように計算しない番号は、文字列のまま扱う。