-1

Java で値 202.10.200 と 202.101.30 を持つことができる 2 つの数値を比較するにはどうすればよいですか。上記の 2 を「数字」にすることはできません。202.101.30 は 202.10.200 より大きくなければならないことに注意して、これを比較する必要があります。

4

4 に答える 4

0

これは、ドットで区切られた任意の (しかし等しい) 数の整数グループで機能します。

private static int compareDotNums(String str1, String str2) {
    if (str1 != null && str2 != null) {
        String[] split1 = str1.split("\\.");
        String[] split2 = str2.split("\\.");

        if (split1.length != split2.length)
            throw new IllegalArgumentException("Input length mismatch.");

        int result = 0;
        for (int i = 0; i < split1.length; i++) {
            try {
                result = Integer.valueOf(split1[i]).
                                         compareTo(Integer.valueOf(split2[i]));
            } catch (NumberFormatException e) {
                throw new IllegalArgumentException(
                                "Illegal input. Not a number.");
            }
            if (result != 0)
                break;
        }
        return result;
    } else
        throw new IllegalArgumentException("Non-null input required.");
}

サンプル出力:

System.out.println(compareDotNums("202.10.200", "202.201.30"));  // -1
System.out.println(compareDotNums("202.210.200", "202.201.30")); // 0
System.out.println(compareDotNums("202.201.30", "202.201.30"));  // 1

System.out.println(compareDotNums("202.201.30.110", "202.201.30.128")); // -1
System.out.println(compareDotNums("202.201.30.128", "202.201.30.128")); // 0
System.out.println(compareDotNums("202.201.30.210", "202.201.30.128")); // 1
于 2013-07-17T07:10:40.393 に答える
0

文字列が構文的に同一であり、「.」で区切られた要素の数が同じであることが確実な場合は、それらを配列に分割し、配列要素を int に変換してから、それらを 1 つずつ比較できます。

String s1 = "202.10.200";
String s2 = "202.101.30";
String sGreater = s1;

String[] strArr1 = s1.split("\\.");
String[] strArr2 = s2.split("\\.");

for (int i=0; i<strArr1.length; i++)
{
  int x1 = Integer.parseInt(strArr1[i]);
  int x2 = Integer.parseInt(strArr2[i]);

  if (x2>x1)
  {
    sGreater = s2;
    break;
  }
}
于 2013-07-17T06:58:19.293 に答える
0

このメソッドは Comparator の実装として使用できます。

public static int compareTo(String s1, String s2) {
    String[] a1 = s1.split("\\.");
    String[] a2 = s2.split("\\.");
    for (int i = 0; i < 3; i++) {
        if (!a1[i].equals(a2[i]))
            return Integer.parseInt(a1[i]) - Integer.parseInt(a2[i]);
    }
    return 0;
}
于 2013-07-17T07:01:20.243 に答える