【问题标题】:Is it possible to compare Strings that are Numbers as if they were Numbers?是否可以将作为数字的字符串作为数字进行比较?
【发布时间】:2012-01-27 20:22:34
【问题描述】:

那里有没有类似设施的图书馆:

public static String Min(String first, String second)

如果你传递它“200”/“300”,它会返回“200”,例如?

我知道有一百万种方法可以让我自己编写,所以我真的不是在那里寻求帮助 - 只是希望找出它是否是其他人已经发明的轮子。

提前致谢!

【问题讨论】:

  • 对于有人实际上浪费时间在库中实现它来说这是一种奇怪的情况——这对我来说似乎是一种不好的做法。我会将您的每个字符串转换为数字,然后简单地通过Math.min() 运行它们。
  • 虽然我很欣赏这个贡献,但我想我不同意上述功能的优点。在 XML 繁重的应用程序中——我们并不真正关心底层数字类型——它会非常方便。

标签: java string string-comparison


【解决方案1】:

在没有前导零的情况下,编程比赛中经常使用的一种技巧是首先比较字符串的长度;如果长度不相等,则较长的字符串获胜;否则,返回字符串的字典比较结果。

编辑:由于您主要关心解决方案的可重用性,因此如果您实现自己的Comparator,您将获得最大的“物有所值”。这将允许您使用标准 Java 类重用相同的实现。例如,您可以将比较器与排序映射一起使用,进行数组和列表排序、二进制搜索等。

【讨论】:

  • 报价+1。我想我的事情甚至不是选择进行比较的实现,而是解决方案的可重用性。如果我自己写,我可能会从简单开始,并尽量避免我拥有的“创意”选项。谢谢!
  • @MattFelzani 如果您关心可重用性,请实现自己的Comparator。这样,您就可以对标准 Java 类使用相同的实现。例如,您可以在排序地图、数组和列表排序、二进制搜索等中使用它。
  • 不,你是对的,实际上“实施”该方法是一个完全不同的问题。虽然我非常感谢那里的帮助,但我的请求更多的是看看其他人是否已经解决了我的问题。谢谢。
  • 标记为答案,因为这是所提供的第一个也是最好的响应。
【解决方案2】:

在每个上使用Integer.parseInt() 并比较该值,例如:

Integer.parseInt(first) > Integer.parseInt(second)

请注意,如果字符串不是有效整数,则会抛出 NumberFormatException,因此请务必考虑到这一点。

【讨论】:

    【解决方案3】:

    将它们转换为数字,使用 Integer.parseInt(String str) 并比较数字:) 并不是真正需要重新发明的大轮子;)

    【讨论】:

    • 是的,我在这里......只是希望有一个更简化的解决方案。甚至铸造是我们在代码中使用了 1000 次的东西。另外,这就是你做 int 的方式......我们从 XML 中获取字符串,所以如果一个方法能够找出底层的数字类型,将每个提升为相同,进行比较,返回一个字符串作为响应,那就太好了。作为开发人员,我实际上并不关心它背后的数字类型是什么。
    • @Matt Felzani - 你不能重用你写的方法吗?
    • 大声笑@Petar Minchev ...它不存在。我引用了更多询问是否是其他人写的。
    【解决方案4】:

    通常,您会在传递给方法之前将字符串转换为数值,然后将结果转换回字符串以供显示。

    【讨论】:

    • 同意。但该代码在我们的代码库中存在 1000 次。只是试图节省一些打字并标准化逻辑(似乎我在@Petar的回复中的评论)。不过谢谢!
    【解决方案5】:

    我怀疑是否有任何此类库具有此类使用String 类但将它们作为数字操作的方法套件。也不应该有。如果字符串不是有效数字,您希望这些方法的行为是什么?

    必须在某处将字符串转换为数字。这是一个验证步骤,用于检查字符串以防它不是有效数字。这是一个完全不同于比较实际数字的功能。将这两个操作合二为一将使这些功能做的工作比他们应该做的要多得多,并且公然违反了单一职责原则。

    我不确定您为什么要将字符串作为数字进行操作——大概是因为输入的字符串是由用户提供的。因此,您必须单独验证该输入,然后将它们转换为数字,之后您将可以使用正常的数学函数。

    【讨论】:

    • 出色的反馈,如果我尝试编写函数,我可能会将其标记为答案。我的帖子更多是为了发现是否有人写过。但是,话虽如此,我完全希望实现会转换为数字并在输入无效时抛出异常。
    【解决方案6】:

    如果您确定字符串是数字,您可以使用正则表达式准备字符串(例如,将 , 替换为 . ...),然后将它们解析为双精度。您应该以这种方式涵盖大多数情况(假设您不解析十六进制值)。

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多