符号なし整数を解析する

JavaJavaBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java のparseUnsignedInt()メソッドを使って文字列を符号なしの 10 進整数として解析する方法を学びます。このメソッドの構文、パラメータ、戻り値の型について説明し、いくつかの例を使ってその使い方を学びます。

新しい Java ファイルを作成する

まず、~/project ディレクトリに新しい Java ファイルを作成する必要があります。これは、ターミナルを開いて次のコマンドを入力することで行えます。

touch ~/project/UnsignedIntegerParser.java

これにより、空白の Nano エディタウィンドウが開きます。

Integer クラスをインポートする

parseUnsignedInt() メソッドが含まれている java.lang パッケージの Integer クラスをインポートする必要があります。これは、ファイル内に次のコードを追加することで行えます。

import java.lang.Integer;

文字列を使って符号なし整数を解析する

次に、parseUnsignedInt() メソッドの使い方を学びましょう。このメソッドを文字列値に対して呼び出すと、それに相当する符号なしの 10 進整数オブジェクトが返されます。以下は例です。

String s = "123";
int n = Integer.parseUnsignedInt(s); //渡された文字列を符号なし整数に変換する
System.out.println(n);

このコードの出力は 123 になります。

無効な入力の処理

parseUnsignedInt() メソッドに無効な入力を与えると、NumberFormatException がスローされます。この例外を try-catch ブロックを使って処理することができます。以下は例です。

try {
  String s = "-123";
  int n = Integer.parseUnsignedInt(s); //渡された文字列を符号なし整数に変換する
  System.out.println(n);
} catch(NumberFormatException ex) {
  System.out.println("無効な入力です。");
}

このコードでは、負の整数を解析しようとしていますが、これは無効です。parseUnsignedInt() メソッドは NumberFormatException をスローし、それは catch ブロックによってキャッチされます。このコードの出力は 無効な入力です。 になります。

コンソールからの入力の読み取り

コンソールから入力を読み取り、それを符号なし整数として解析することもできます。以下は例です。

Scanner scanner = new Scanner(System.in);
System.out.print("正の整数を入力してください:");
String s = scanner.nextLine();
try {
  int n = Integer.parseUnsignedInt(s); //渡された文字列を符号なし整数に変換する
  System.out.println(n);
} catch(NumberFormatException ex) {
  System.out.println("無効な入力です。");
}

このコードでは、Scanner クラスを使ってコンソールから入力を読み取っています。次に、parseUnsignedInt() メソッドを使って入力文字列を符号なし整数として解析しています。最後に、入力を解析する際に発生する可能性のある例外をキャッチしています。

このコードをターミナルで実行するには、まず次のコマンドを使ってコンパイルする必要があります。

javac UnsignedIntegerParser.java

その後、次のコマンドを使って実行できます。

java UnsignedIntegerParser

文字列のリストから符号なし整数を解析する

文字列のリストから符号なし整数を解析することもできます。以下は例です。

List<String> stringList = Arrays.asList("123", "456", "789");
for (String s : stringList) {
  try {
    int n = Integer.parseUnsignedInt(s); //渡された文字列を符号なし整数に変換する
    System.out.println(n);
  } catch(NumberFormatException ex) {
    System.out.println("無効な入力:" + s);
  }
}

このコードでは、文字列のリストを反復処理し、parseUnsignedInt() メソッドを使って各文字列を符号なし整数として解析しています。文字列が有効な符号なし整数でない場合、例外をキャッチしてエラーメッセージを表示します。

ヘルパー関数を使用する

符号なし整数を解析するたびに同じ try-catch ブロックを繰り返すのを避けるために、文字列を入力として受け取り、符号なし整数を返すヘルパー関数を作成することができます。以下は例です。

public static int parseUnsignedInt(String s) {
  try {
    return Integer.parseUnsignedInt(s); //渡された文字列を符号なし整数に変換する
  } catch(NumberFormatException ex) {
    return -1; //無効な入力の場合は -1 を返す
  }
}

このコードでは、文字列を入力として受け取り、符号なし整数を返すparseUnsignedInt()関数を定義しています。入力が有効な符号なし整数でない場合、関数は -1 を返します。その後、この関数を使って例外を心配することなく符号なし整数を解析することができます。この関数の使い方の例を以下に示します。

String s = "123";
int n = parseUnsignedInt(s);
System.out.println(n); //出力:123

s = "-123";
n = parseUnsignedInt(s);
System.out.println(n); //出力:-1

より大きな符号なし整数の処理

より大きな符号なし整数を解析する必要がある場合、Integer クラスの代わりに UnsignedInteger クラスの parseUnsignedInt() メソッドを使用できます。このメソッドは int ではなく long を返します。以下は例です。

String s = "4294967295"; //符号なし 32 ビット整数の最大値
long n = Long.parseUnsignedLong(s);
System.out.println(n); //出力:4294967295

基数を使用する

10 以外の基数で表される数を表す文字列を解析したい場合、追加の 基数 パラメータを持つ parseInt() メソッドを使用できます。以下は例です。

String s = "1101"; //13 の 2 進数表現
int n = Integer.parseUnsignedInt(s, 2); //2 進数として解析
System.out.println(n); //出力:13

Nano を終了してコードを実行する

Nano を終了するには、Ctrl+X を押してから、ファイルを保存するために Y を押し、その後 Enter を押します。

端末でコードを実行するには、次のコマンドを使用してコンパイルできます。

javac UnsignedIntegerParser.java

その後、次のコマンドを使用して実行できます。

java UnsignedIntegerParser

まとめ

この実験では、Java の parseUnsignedInt() メソッドを使用して文字列を符号なしの 10 進整数として解析する方法を学びました。また、無効な入力を処理する方法、コンソールから入力を読み取る方法、文字列のリストから符号なし整数を解析する方法、およびヘルパー関数の使用方法も学びました。また、より大きな符号なし整数を解析する方法、基数を使用する方法、および端末でコードを実行する方法も学びました。