繁体   English   中英

比较两个长字符串

[英]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

串#的compareTo

如果不确定,如果字符串中仅包含数字,请考虑使用此自然比较器

使用字符串比较的问题在于,字符串比较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

将字符串转换为适当的数字类型(如LongBigInteger甚至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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM