Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで数値を含む文字列の中身を正しくソートする方法


Javaでは、スペース区切りの数値が含まれた文字列をそのままソートすると、「辞書順」で比較されてしまい、意図しない結果になります(例:「10」が「2」より前に来る)。数値として正しく並べ替えるには、文字列を一度整数に変換してからソートする必要があります。

具体的な手順は以下の通りです。

  • 対象となる文字列を用意します。

  • 結果を格納するための空の整数型配列を作成します。

  • split() メソッドは、区切り文字を表す文字列を受け取り、元の文字列をトークン(部分文字列)の配列に分割します。このメソッドを使って、指定した文字列を配列に分解します。

  • Integer.parseInt() メソッドは、文字列形式の数値を受け取り、int型の整数へ変換します。前のステップで得た文字列配列の各要素を整数に変換し、整数配列に格納していきます。

  • Arrays.sort() メソッドは、配列を受け取り、その内容を昇順に並べ替えます。このメソッドを使って整数配列をソートします。

なお、Arrays クラスを使用する場合は、java.util.Arrays をインポートしておく必要があります。

サンプルコード

import java.util.Arrays;

public class SortingStrings {
    public static void main(String args[]) {
        String str = "22 58 69 63 69 55 669 24 4285 654 1 296 564 2 582 255 562";
        System.out.println("Contents of the string: "+ str);
        // 文字列を空白で分割して配列にする
        String[] stringArray = str.split(" ");
        // 各要素を整数に変換して格納
        int [] intArray = new int[stringArray.length];
        for(int i = 0; i < stringArray.length; i++) {
            intArray[i] = Integer.parseInt(stringArray[i]);
        }
        // 整数配列を昇順にソート
        Arrays.sort(intArray);
        System.out.println("Sorted integer values: "+Arrays.toString(intArray));
    }
}

実行結果

Contents of the string: 22 58 69 63 69 55 669 24 4285 654 1 296 564 2 582 255 562
Sorted integer values: [1, 2, 22, 24, 55, 58, 63, 69, 69, 255, 296, 562, 564, 582, 654, 669, 4285]

このように、split()parseInt()sort() の流れで処理することで、文字列内の数値を数値の大小順に正確にソートできます。桁数の異なる数値が混在する場合でも、期待通りの昇順結果が得られる点がポイントです。

  1. JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説

    StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T

  2. 【Python】文字列から整数値を抽出・取得する方法をわかりやすく解説

    Pythonでは、正規表現(reモジュール)を使うことで、文字列の中から出現順にすべての整数値を抽出し、リストとして取得できます。以下のコード例をご覧ください。 正規表現ですべての整数値を抽出する import re s = 12 hello 52 19 some random 15 number # 数字部分を抽出し、int型に変換する list_of_nums = [int(n) for n in re.findall(r\d+, s)] print(list_of_nums) 出力結果 [12, 52, 19, 15] re.findall(r\d+, s) は、文字列 s から連続し