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

最終更新日

Schoo Java入門 中級 第4回 Webアプリケーションの動作原理と画面連携

本記事は、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 が返ります。

このように、フォームから送信され、名前を指定して取り出す値をリクエストパラメータと呼びます。

図解:入力した「3」が計算に使えるようになるまで
1. ブラウザで数量を入力
数量 3
<input type="number" name="quantity">
フォーム送信:quantity=3
2. サーバーで文字列として取得
String quantityText =
  request.getParameter(
    "quantity");
"3" String型 / quantityText
Integer.parseInt(quantityText) で数値に変換
3. 整数を別の変数に受け取る
int quantity =
  Integer.parseInt(quantityText);
3 int型 / quantity
4. 単価500円 × 数量3個 = 合計1,500円
int total = 500 * quantity;

引用符は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
図解:同じ + でも、型によって結果が変わる
String同士:文字をつなぐ
"100" + "20"
結果もString型
"10020"
int同士:数値を足す
100 + 20
結果もint型
120

また、文字列の 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" の場合、quantity3total1500 が入ります。元の 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 に変換できない。
  • 注文できる数量か:0100 は整数に変換できても、1〜99個という要件を満たさない。
取得した値判断処理
"3"有効な数量1,500円と計算
"" / null入力・送信がない入力を求める
"abc" / "3.5"整数に変換できない整数の入力を求める
"0" / "100"数量の範囲外1〜99個の入力を求める

変換できない文字列を Integer.parseInt() に渡すと、NumberFormatException が通知されます。int の範囲を超える "2147483648" も同じです。try-catch で受け取り、入力を直してもらうメッセージにします。

ブラウザの requiredminmax は入力時の手助けになりますが、サーバーへ別の値が直接送られることもあるので、受け取る側でも確認します。

チェックを含めた受け取り側のコード

次が 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 型の変数に受け取る。
  • 値があるか、整数として読めるか、要件の範囲内かを順に確認する。
  • 電話番号のように計算しない番号は、文字列のまま扱う。

関連する記事

シェアする