Java で値 202.10.200 と 202.101.30 を持つことができる 2 つの数値を比較するにはどうすればよいですか。上記の 2 を「数字」にすることはできません。202.101.30 は 202.10.200 より大きくなければならないことに注意して、これを比較する必要があります。
質問する
71 次
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 に答える