android 如何比较值3.0.1与3.0.2,其中这两个数值是字符串?[已关闭]

k7fdbhmy  于 2023-01-28  发布在  Android
关注(0)|答案(3)|浏览(87)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

六年前关闭了。
Improve this question
我有字符串数据类型java的3.0.1和3.0.2,现在我想检查哪个值更大,因此我使用Float.parseFloat(str)将这两个值转换为float。
但它抛出了一个数字格式异常。
有人帮忙吗?

relj7zay

relj7zay1#

3.0.1和3.0.2不是数字,它们只能作为字符串进行比较。这就是为什么会出现数字格式异常。

zi8p0yeb

zi8p0yeb2#

像这样逐个检查每个数字

public int compare(String x, String y) {
    String[] a = x.split("\\.");
    String[] b = y.split("\\.");
    for (int i = 0; i < a.length; i++) {
        // Return 1 if x is greater, -1 if y is greater, 0 if equal
        if (Integer.parseInt(a[i]) > Integer.parseInt(b[i])) {
            return 1;
        }
        else if (Integer.parseInt(a[i]) < Integer.parseInt(b[i])) {
            return -1;
        }
    }
    return 0;
}
p4rjhz4m

p4rjhz4m3#

3.0.1不是一个数字,它基本上是一个由句点分隔的数字序列。
一种想法是创建一个类来表示这个版本号,我们将版本代码3.0.1解释为一个由句点分隔的数字序列;基本上是一个int的数组。我们可以用句点字符分割输入字符串,得到版本号的组成部分。在版本号中,每个整数都可以称为“组成部分”。版本号3.0.1有三个组成部分:x一米四氮一x、x一米五氮一x和x一米六氮一x。
一旦我们创建了两个Version示例,我们就可以将它们相互比较,比较如下:对于Version示例具有的每个组件,该组件将与另一版本中相同位置处的组件匹配。

public class Version implements Comparable<Version> {

    private List<Integer> components = new ArrayList<Integer>();

    public Version(String version) {
        String[] parts = version.split("\\.");
        for (String part : parts) {
            // Parse the integer. We assume it is a valid number
            this.components.add(Integer.parseInt(part));
        }
    }

    @Override
    public int compareTo(Version o) {
        for (int i = 0; i < this.components.size(); i++) {
            // Compare the corresponding elements with eachother.
            // We assume the lengths of the 'numbers' are equal.
            int compare = this.components.get(i).compareTo(o.components.get(i));
            if (compare != 0) {
                return compare;
            }
        }
        return 0;
    }
}

相关问题