![](/img/trans.png)
[英]Is it faster to hash a long string for comparisons or compare the two strings?
[英]Compare two long Strings
我想比较两个具有这些形式的字符串
s1="1390785186301" s2="1390785191301"
我应该将它们转换为long,然后与>
进行比较,还是有方法?
如果要比较两个字符串,只需使用compareTo方法
if(s1.length() == s2.length()){
if(s1.compareTo(s2) > 0) {//then s1 is greater...}
}
看看javadoc
如果不确定,如果字符串中仅包含数字,请考虑使用此自然比较器 。
使用字符串比较的问题在于,字符串比较12在9之前,而不是之后。
您将需要将其转换为long
(如果适合64位整数的范围内)或BigInteger
,然后使用它们进行比较。
长久以来:
if (Long.parseLong(str1) > Long.parseLong(str2)) {
}
要么:
int comparison = Long.compare(Long.parseLong(str1), Long.parseLong(str2));
最后的选择是做一个自己的字符串比较器,该比较器从字符串的开头扫描一次,一次比较一位数字,但是如果字符串长度不相等,则将较短的数字视为保留为0。
这里满ans
public class Comparetion {
public static void main(String args[]){
String s1="1390785186301";
String s2="1390785191301";
if (s1.compareTo(s2) == 0) {
System.out.println("s1 and S2 its same");
}
if (s1.compareTo(s2) > 0) {
System.out.println("S1 is bigger then s2");
}
if (s1.compareTo(s2) < 0) {
System.out.println("S2 is less then S1");
}
}
}
public class Comparetion {
public static void main(String args[]){
String s1="1390785186301";
String s2="1390785191301";
if (Long.parseLong(s1) < Long.parseLong(s2)) {
System.out.println("s1 is less then s2");
}
else if(Long.parseLong(s1) > Long.parseLong(s2)){
System.out.println("s1 is bigger then s2");
}
else{
System.out.println("s1 and s2 are same.");
}
}
}
两种可能性。 但是在“比较”的情况下会得到例外情况。
if (new Long(s1) > new Long(s2))
// do your thing
我认为没有理由不为此做多。
这是更多信息: http : //docs.oracle.com/javase/6/docs/api/java/lang/Long.html#Long%28java.lang.String%29
根据您的需要,您可以使用equals
方法检查两个字符串是否都包含完全相同的值(假设没有前导零,并且两个数字都使用相同的符号表示,例如, "101"
和"1.01E2"
表示相同的值,但是字符串不相同)等于)。
但是,如果您要检查哪个字符串包含更大的值,则字符串不会提供太多帮助。 它有自己的compareTo
方法,但使用字母顺序,如果
ab
将在字典中的b
之前一样,同样的规则适用于"12"
"2"
,这意味着12 < 2
使用此顺序 12 < 13
按字母顺序排列,但也意味着-12 < -13
。 将字符串转换为适当的数字类型(如Long
, BigInteger
甚至BigDecimal
并使用适当的方法(如compareTo
)更加容易和安全。
演示
String s1 = "1390785186301";
String s2 = "1390785191301";
System.out.println(Long.compare(Long.parseLong(s1), Long.parseLong(s2))); // -1
System.out.println(new BigInteger(s1).compareTo(new BigInteger(s2))); // -1
a.compareTo(b)
负值表示a<b
,0表示a==b
, 正值表示a>b
演示2:
BigDecimal bigDecimal = new BigDecimal("101");
BigDecimal bigDecimal2 = new BigDecimal("1.01E2");
System.out.println(bigDecimal.equals(bigDecimal2)); // true
System.out.println(bigDecimal.compareTo(bigDecimal2)); // 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.