2012-01-27 70 views
2

是否有一个图书馆,在那里,有一个设施是这样的:是否可以将数字的字符串作为数字进行比较?

public static String Min(String first, String second) 

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

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

在此先感谢!

+1

这是一个奇怪的局面有人反倒浪费了自己的时间在图书馆实现它 - 它看起来不好的做法给我。我会将每个字符串转换为数字,然后通过'Math.min()'运行它们。 – 2012-01-27 20:26:45

+0

而我欣赏的贡献,我想我不同意的优点说功能。在一个XML重度应用程序中 - 我们并不关心底层数字类型 - 它会非常方便。 – 2012-01-27 20:30:44

回答

5

在没有前导零的情况下,在编程比赛中频繁使用的黑客就是先比较字符串的长度;如果长度不相等,则较长的字符串胜出;否则,返回字符串的词典比较结果。

编辑:既然你不在乎大部分是关于您的解决方案的可重用性,你会得到的最大“的降压砰”的一声,如果你实现自己的Comparator。这可以让你重复使用标准Java类的相同实现。例如,您可以将您的比较器用于已排序的映射,执行数组和列表排序,二进制搜索等。

+0

+1。我想我的东西甚至不是选择执行比较的实现,因为它是解决方案的可重用性。如果我写我自己的,我可能会开始简单,并尽量避免我有“创意”选项。谢谢! – 2012-01-27 20:33:03

+1

@MattFelzani如果你关心的可重用性,实现自己的[比较](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Comparator.html)。这样你就可以在标准Java类中使用相同的实现。例如,您可以在有序地图,数组和列表排序,二进制搜索等中使用它。 – dasblinkenlight 2012-01-27 20:42:04

+0

不,你说得对,实际上“实施”这个方法是一个完全不同的问题。虽然我非常感谢那里的帮助,但我的邀请更多的是看看别人是否已经解决了我的问题。谢谢。 – 2012-01-27 20:48:18

2

那么它们转换为数字,使用Integer.parseInt(String str)和比较的数字:)不是一个真正的大轮重塑;)每个

+0

是啊,我在船上这里...只是希望一个更精简的解决方案是在那里。即使是铸造也是我们在代码中有1000次的东西。再加上,这是你该怎样整数...我们得到的字符串进行XML的所以这将是整洁,如果一个方法可以只找出潜在的数字类型,相互促进,以相同的,做比较,在响应返回一个字符串。作为开发人员,我实际上并不关心它的数字类型是什么。 – 2012-01-27 20:27:18

+0

@马特Felzani - 难道你不重用你所写的方法? – 2012-01-27 20:31:30

+0

哈哈@Petar Minchev ...它不存在。我引用了更多的问题是否有人写过。 – 2012-01-27 20:34:07

3

使用Integer.parseInt()和比较值,例如:

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

请注意,如果字符串是而非是一个有效整数,则会抛出NumberFormatException,因此请务必说明这一点。

1

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

+0

同意。但是那个代码在我们的代码基础上是1000次。只是试图保存一些打字和标准化的逻辑(似乎我在@ Petar的回应中的评论)。尽管谢谢! – 2012-01-27 20:28:51

1

我怀疑是否有任何这样的库,有一套这样的方法使用String类,但对它们作为数字进行操作。也不应该有。如果字符串不是有效的数字,你会期望这些方法的行为是什么?

There 必须是一个将字符串转换为数字的步骤。这是一个验证步骤,如果它不是有效的数字,则对该字符串进行审核。它与比较的实际数字是完全不同的功能。将这两个操作合并为一个操作将会使这些功能的工作量超出其应有的范围,并公然违反单一责任原则。

我不知道你为什么想在字符串上操作数字 - 大概是因为进入的字符串是由用户提供的。因此,您必须单独验证该输入,然后将其转换为数字,之后您将拥有正常的数学函数。

+0

杰出的反馈,我可能会标记为答案,如果我试图写这个功能。我的帖子更多地发现是否有其他人写了它。然而,据说我完全期望一个实现将转换为数字,并在输入无效时抛出异常。 – 2012-01-27 20:36:51

0

如果你确定该字符串是一个数字,你可以准备一个正则表达式的字符串(例如,用.替换, ...),然后将它们解析为double。您应该以这种方式覆盖大部分情况(假设您不解析十六进制值)。

相关问题